如何引用接口在Java中实现的类类型?
我在编写的程序中遇到接口问题。我想创建一个接口,该接口的方法之一可以接收/返回对自己对象类型的引用。就像这样:
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;
}
}
但这似乎确实是一种解决方法或类似方法。还有另一种方法吗?
回答:
扩展接口时,有一种方法可以强制使用自己的类作为参数:
interface I<SELF extends I<SELF>> { SELF getSelf();
}
class A implements I<A> {
A getSelf() {
return this;
}
}
class B implements I<A> { // illegal: Bound mismatch
A getSelf() {
return this;
}
}
编写泛型类时,这甚至可以工作。 唯一的缺点:必须强制转换this
为SELF
。
正如Andrey Makarov在下面的评论中指出的那样,在编写泛型类时,这
可靠地工作。
class A<SELF extends A<SELF>> { SELF getSelf() {
return (SELF)this;
}
}
class C extends A<B> {} // Does not fail.
// C myC = new C();
// B myB = myC.getSelf(); // <-- ClassCastException
以上是 如何引用接口在Java中实现的类类型? 的全部内容, 来源链接: utcz.com/qa/400931.html