我怎样才能摆脱警告 Unchecked overriding: return type requires unchecked conversion. Found 'org.example.AAndB<java.lang.integer>', required 'T'.
在下面的代码中。
我尝试设计一个接口(interface) ( Interface
),使其不会显式声明方法的返回类型 get()
( AAndB<Integer>
) 而是枚举结果必须实现的接口(interface) ( <T extends B<Integer> & A> T
)。
package org.example;
class InterfaceImpl implements Interface {
public AAndB<Integer> get() {
// ^----- Unchecked overriding: return type requires unchecked conversion. Found 'org.example.AAndB<java.lang.integer>', required 'T'.
final AAndB<Integer> aAndB = new AAndB<Integer>();
return aAndB;
}
}
interface Interface {
<T extends B<Integer> & A> T get();
}
class AAndB<T> implements A, B<T> {
public void a() {
}
public void b(T t) {
}
}
interface A {
void a();
}
interface B<T> {
void b(T t);
}
最佳答案
我们可以清楚地看到,您实现的方法签名与 Interface
中定义的方法签名不匹配:
public AAndB<Integer> get()
不等于
public <T extends B<Integer> & A> T get()
T
的定义是方法签名的一部分。为了遵守 Interface.get,您需要编写:
class InterfaceImpl implements Interface {
public <T extends B<Integer> & A> T get() {
// ...
}
}
接口(interface)方法签名中的有界泛型并不意味着您可以替换您自己的方法实现中范围内的任何类型。
如果希望能够指定不同的返回类型,需要参数化Interface
:
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();
}
关于java - 类型参数范围 - 未检查覆盖 : return type requires unchecked conversion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35900520/