[英]calling list that takes a typed list with a method that returns a generic list?
[英]Method with typed list and inheritance
我有一个带有类型List参数的方法的麻烦,继承自另一个(类型)类。
让我们保持简单:
public class B<T> {
public void test(List<Integer> i) {
}
}
B类有一个无用的泛型T,而test()需要一个整数列表。
如果我这样做:
public class A extends B {
// don't compile
@Override
public void test(List<Integer> i) {
}
}
我得到一个“ 类型A的方法测试(列表)必须覆盖或实现超类型方法 ”错误,这不应该发生。
但删除列表的类型有效...虽然它不依赖于类泛型。
public class A extends B {
// compile
@Override
public void test(List i) {
并且还定义下面的无用通用以使用类型列表
public class A extends B<String> {
// compile
@Override
public void test(List<Integer> i) {
所以我很无能,B的泛型应该对test()列表的类型没有影响。 有没有人知道发生了什么?
谢谢
您正在扩展B的原始类型,而不是通用类型。 原始方法实际上没有test(List<Integer> i)
方法,而是test(List)
方法。
如果切换到原始类型,则所有泛型都将被原始替换,无论其类型是否已填充。
要做得好,做
public class A<T> extends B<T>
这将使用泛型类型B<T>
,其中包括您要覆盖的方法。
当你删除使用没有泛型的类(并使用它原始)时,类方法中的所有泛型都会被遗忘。
因此,当您在第二种情况下通知泛型类型时,您可以使用它。
这个:
class T<G> {
public void test(G g);
}
在这种情况下:
class A extends T {
}
将如下所示:
class T {
public void test(Object g);
}
这是一个在Google IO 2011上展示的Java拼图,你可以在这里看到视频
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.