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();
    }
}