Java 当具有有界类型参数的类的方法返回其自己类型的值时,如何使返回值保持泛型(不强制转换)?
我有一个类Java 当具有有界类型参数的类的方法返回其自己类型的值时,如何使返回值保持泛型(不强制转换)?,java,generics,Java,Generics,我有一个类a,其中包含类型为a的字段(类似于链表实现中节点具有节点nextNode),如下所示: 然后我有一个类B,它有一个有界类型参数,它试图将getOtherA()的返回值赋给T类型的变量: public class B<T extends A> { public B(T t1) { T t2 = t1.getOtherA(); } } 读作 Incompatible types. Required T, Found A. 我的问题是如何(
a
,其中包含类型为a
的字段(类似于链表实现中节点
具有节点nextNode
),如下所示:
然后我有一个类B
,它有一个有界类型参数
,它试图将getOtherA()
的返回值赋给T
类型的变量:
public class B<T extends A> {
public B(T t1) {
T t2 = t1.getOtherA();
}
}
读作
Incompatible types. Required T, Found A.
我的问题是如何(如果可能)修改代码,以便将getOtherA()
的返回值视为类型T
。毕竟,t1
属于T
类型,T
扩展A
和getOtherA()
只返回与其所属对象类型相同的对象。那么为什么T#getOtherA()
没有返回类型T
在我看来,我的编译器应该满足于
t1.getOtherA()
总是返回类型为T
的对象,但我怀疑我对泛型有误解,在这种情况下,我会咬紧牙关,将每个泛型转换为我想要的类型。错误是因为getOtherA()
返回一个A
,它不一定是T
如果将A
设置为泛型,并将类型参数设置为类A
本身,则可以接近您的需求
// Introduce type parameter T, upper bound itself.
class A<T extends A<T>> {
protected T otherA; // now of type T
public T getOtherA() { // now returns T
return otherA;
}
}
或者,他们可以使用类似的约束声明自己的类型参数:
class ASub<T extends ASub<T>> extends A<T> {
// Implementation
}
错误是因为
getOtherA()
返回一个A
,它不一定是T
如果将A
设置为泛型,并将类型参数设置为类A
本身,则可以接近您的需求
// Introduce type parameter T, upper bound itself.
class A<T extends A<T>> {
protected T otherA; // now of type T
public T getOtherA() { // now returns T
return otherA;
}
}
或者,他们可以使用类似的约束声明自己的类型参数:
class ASub<T extends ASub<T>> extends A<T> {
// Implementation
}
可能是因为
getOtherA
返回类型为A
的对象,而不是T
T
可以是A
,但不能保证A
是T
?../也许这个答案()可以提供线索?可能是因为getOtherA
返回类型为a
的对象,而不是T
T
可以是A
,但不能保证A
是T
?../也许这个答案()可以提供线索?我不能使用这个解决方案,因为它需要我编辑的接口,但它完全回答了我的问题,所以我接受。谢谢。A
声明中的T
绑定是不必要的<代码>A类就足够了我不能使用此解决方案,因为它需要我编辑A的接口,但它完全回答了我的问题,所以我接受。谢谢。A
声明中的T
绑定是不必要的<代码>A类已足够
class ASub<T extends ASub<T>> extends A<T> {
// Implementation
}
class B<T extends A<T>> {
public B(T t1) {
T t2 = t1.getOtherA();
}
}