gpt4 book ai didi

java - 如何引用 Java 中接口(interface)实现的类类型?

转载 作者:太空宇宙 更新时间:2023-11-04 13:09:36 28 4
gpt4 key购买 nike

我在编写的程序中遇到了接口(interface)问题。我想创建一个接口(interface),其方法之一接收/返回对自己对象类型的引用。它是这样的:

public interface I {
? getSelf();
}

public class A implements I {
A getSelf() {
return this;
}
}

public class B implements I {
B getSelf() {
return this;
}
}

我不能在“?”处使用“I”,因为我不想返回对接口(interface)的引用,而是返回对类的引用。我搜索了一下,发现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)时强制使用自己的类作为参数:

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) 在 a comment below 中指出的那样在编写泛型类时,这可靠地工作。

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 - 如何引用 Java 中接口(interface)实现的类类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34109004/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com