我在制作一个程序时遇到了与接口相关的问题。我想创建一个接口,其中一个方法接收/返回对该对象本身类型的引用。大致如下:
public interface I {
? getSelf();
}
public class A implements I {
A getSelf() {
return this;
}
}
public class B implements I {
B getSelf() {
return this;
}
}
我不能在需要一个类时使用 "I",因为我不想返回该接口的引用,而是返回该类。我搜索了一下,发现在Java中无法进行“自我引用”,因此我不能只是用一个“self”关键字或类似的内容替换示例中的“?”。 实际上,我想到了一个解决方案,大概是这样的
public interface I<SELF> {
SELF getSelf();
}
public class A implements I<A> {
A getSelf() {
return this;
}
}
public class B implements I<B> {
B getSelf() {
return this;
}
}
但这似乎只是一个变通方法,还有其他的方法可以实现吗?
I x; A = x.getSelf(); // 仅适用于A对象 B = x.getSelf(); // 仅适用于B对象
- Paul Jackson