此方法声明有什么问题?
public abstract class A<K extends Number>{
public abstract <K> A<K> useMe (A<K> k);
}
我看到编译错误:
java: type argument K is not within bounds of type-variable K
我首先想到的是这个编译错误是因为 - 我的方法声明中不能保证K是Number,这就是为什么会出现问题。
但在另一个案例中如下:
public abstract <K> A<? extends Number> useMe (A<? super K> k);
A<? super K>
再次无法保证它是Number(但IDE符号警告),但它不是编译错误。
有什么区别?
答案 0 :(得分:1)
从类中删除extends numbers并使用方法添加它,即
public abstract class A<T>{
public abstract <T extends Number> A<T> useMe(A<T> t);
}
答案 1 :(得分:0)
好的,这是一个不同的答案。
原因是虽然您在方法中使用<K>
作为通用,但它与您在班级中使用的<K>
无关。如果你写了
abstract class A<K extends Number>{
public abstract <T> A<T> useMe(A<T> t);
}
此处<T>
是一些通用的,但您有限制A仅使用扩展Number
和<T>
的泛型,在这种情况下不会,并且它无法实现A的合同这是错误的来源。因此你应该写
abstract class A<K extends Number>{
public abstract <T extends Number> A<T> useMe(A<T> k);
}