【发布时间】:2012-06-28 21:39:13
【问题描述】:
我在使用具有类型化 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 类型的方法 test(List) 必须覆盖或实现超类型方法”错误,这是不应该发生的。
但是删除列表的类型是可行的……尽管它不依赖于泛型类。
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() 列表的类型没有影响。有人知道发生了什么吗?
谢谢
【问题讨论】:
-
我相信你的答案在于here。
-
通常 [capital V]
Void用于您不想使用的通用参数。例如使用java.security.PreivilegedAction而不返回值(返回null- 这是唯一有效的Void引用)。
标签: java list inheritance typed