import java.util.ArrayList;
import java.util.List;
class A<T> {
T value;
B<? super T> b;
void method() {
b.method(value,new ArrayList<T>());
}}
interface B<X> {
<VT extends X> VT method(VT p, List<VT> lst);
}
// works fine
class C implements B<Number> {
public <VT extends Number> VT method(final VT p, final List<VT> lst) {
return p;
}}
// causes warning
class D implements B<String> {
public <VT extends String> VT method(final VT p, final List<VT> lst) {
return p;
}}
// error: The type E must implement the inherited abstract method B<String>.method(VT, List<VT>)
class E implements B<String> {
@SuppressWarnings("unchecked")
public String method(final String p, final List<String> lst) {
return p;
}}
谢谢! 克里斯蒂安
答案 0 :(得分:2)
你的代码没有编译,但这里有类似的东西,我认为是你想要的:
class A<T>{
T value;
B<? super T> b;
void method(){
b.method(value);
}
}
interface B<X>{
<VT extends X> VT method(VT p);
}
// works fine
class C implements B<Number>{
public <VT extends Number> VT method(VT p){return p;}
}
// causes warning
class D implements B<String>{
public <VT extends String> VT method(VT p){return p;}
}
看到你在这里没有选择extends String
,我会说这是Eclipse中的一个错误。此外,Eclipse通常可以建议适当的SuppressWarnings
,但不在此处。 (另一个错误?)
您可以做的是将返回和参数类型更改为String
,然后禁止它导致的(不相关的)类型安全警告:
// no warnings
class D implements B<String>{
@SuppressWarnings("unchecked")
public String method(String p){return p;}
}