如何引用接口在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;

}

}

编写泛型类时,这甚至可以工作。 唯一的缺点:必须强制转换thisSELF

正如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

回到顶部