【发布时间】:2011-06-04 10:47:24
【问题描述】:
假设我有以下静态方法和接口(List 是 java.util.List)。请注意,静态方法在列表的通配符类型上强制使用“super Foo”。
public class StaticMethod {
public static void doSomething(List<? super Foo> fooList) {
...
}
}
public interface MyInterface<T> {
public void aMethod(List<T> aList);
}
我希望能够添加一个使用静态方法实现接口的类,如下所示:
public class MyClass<T> implements MyInterface<T> {
public void aMethod(List<T> aList) {
StaticMethod.doSomething(aList);
}
}
这显然不会编译,因为 T 没有“super Foo”约束。但是,我看不到任何添加“超级 Foo”约束的方法。例如 - 以下是不合法的:
public class MyClass<T super Foo> implements MyInterface<T> {
public void aMethod(List<T> aList) {
StaticMethod.doSomething(aList);
}
}
有什么办法可以解决这个问题——最好不要改变StaticMethod 或MyInterface?
【问题讨论】:
-
我假设你不能要求
MyClass实现MyInterface<Long>?可以工作,但不能完全达到你想要的效果。 -
仅供参考:Angelika Langer 涵盖了 here 类型的下界
-
@McDowell 这很有帮助。有趣的是,通配符允许下限。我需要再考虑一下——这个例子是否为安吉丽卡·兰格的论点提供了一个反例
标签: java generics wildcard super