Java 类型参数边界-未经检查的重写:返回类型需要未经检查的转换

Java 类型参数边界-未经检查的重写:返回类型需要未经检查的转换,java,generics,type-bounds,Java,Generics,Type Bounds,如何消除警告未检查的覆盖:返回类型需要未检查的转换。在下面的代码中找到“org.example.AAndB”,需要“T”。 我试图设计一个接口(interface),这样它就不会显式地声明方法的返回类型get()(AAndB),而是枚举结果必须实现的接口(t) package org.example; 类InterfaceImpl实现接口{ 公共AAndB get(){ //^-----未经检查的重写:返回类型需要未经检查的转换。找到“org.example.AAndB”,需要“T”。 最终AA

如何消除警告
未检查的覆盖:返回类型需要未检查的转换。在下面的代码中找到“org.example.AAndB”,需要“T”。

我试图设计一个接口(
interface
),这样它就不会显式地声明方法的返回类型
get()
AAndB
),而是枚举结果必须实现的接口(
t

package org.example;
类InterfaceImpl实现接口{
公共AAndB get(){
//^-----未经检查的重写:返回类型需要未经检查的转换。找到“org.example.AAndB”,需要“T”。
最终AAndB AAndB=新的AAndB();
返回a和b;
}
}
接口{
T get();
}
类A和B实现了A、B{
公共图书馆a(){
}
公共空间b(T){
}
}
接口A{
使a()无效;
}
接口B{
空隙b(T);
}

我们可以清楚地看到,您实现的方法签名与
接口中的方法定义的签名不匹配:

public AAndB<Integer> get()
class InterfaceImpl implements Interface<AAndB<Integer>> {

    public AAndB<Integer> get() {
        final AAndB<Integer> aAndB = new AAndB<Integer>();
        return aAndB;
    }
}

interface Interface<T extends B<Integer> & A> {
     T get();
}
接口方法签名中的有界泛型并不意味着您可以在自己的方法实现中替换边界内的任何类型

如果您希望能够指定不同的返回类型,则需要参数化
接口

public AAndB<Integer> get()
class InterfaceImpl implements Interface<AAndB<Integer>> {

    public AAndB<Integer> get() {
        final AAndB<Integer> aAndB = new AAndB<Integer>();
        return aAndB;
    }
}

interface Interface<T extends B<Integer> & A> {
     T get();
}
类接口impl实现接口{
公共AAndB get(){
最终AAndB AAndB=新的AAndB();
返回a和b;
}
}
接口{
T get();
}

你完全误解了
T得到的是什么()意味着

T get()声明一个泛型方法。这意味着该方法必须能够正确地处理任何
T
——它必须正确地处理
T
是任何调用方可能想要的
T
,甚至不知道
T
是什么


这并不意味着方法可以选择
T
作为它想要的。恰恰相反。该方法没有选择,必须与为其选择的任何
T
一起使用。

能否请您详细说明为什么原始
InterfaceImpl
没有实际实现
接口
?更新了更多细节。我发现了一个全面的相关问题。