Java 无法使用通配符调用泛型方法
我有一个这样定义的类:Java 无法使用通配符调用泛型方法,java,generics,Java,Generics,我有一个这样定义的类: public class Test { static <T> List<Class<T>> filter(List<Class<T>> input) { // code here } public static void main(String[] args) { List<Class<? extends Throwable>> l
public class Test {
static <T> List<Class<T>> filter(List<Class<T>> input) {
// code here
}
public static void main(String[] args) {
List<Class<? extends Throwable>> list =
new ArrayList<Class<? extends Throwable>>();
filter(list);
}
}
我不明白为什么
没有绑定到啊,通用签名的乐趣
您可以通过将参数声明为:
static <T> List<Class<T>> filter(List<Class<? extends T>> input) {
// code here
}
静态列表过滤器(List我认为这里的问题是没有适合?
的类型
考虑一下,为了简单起见,我们是否将类
替换为原子引用
static <T> void filter(List<AtomicReference<T>> input) {
T value = input.get(0).get();
input.get(1).set(value);
}
静态无效过滤器(列表输入){
T value=input.get(0.get();
输入.获取(1).设置(值);
}
如果输入
由原子参考
和原子参考
组成,我们将遇到麻烦
在存在多态性的情况下,指向指针的潜在问题是困难的。没有泛型,我们可以直接挥手挥手。有了泛型,我们需要真正有意义。您还可以编写main,如下所示:
public static void main(String[] args) {
List<Class<Throwable>> list =
new ArrayList<Class<Throwable>>();
filter(list);
}
publicstaticvoidmain(字符串[]args){
列表=
新的ArrayList();
过滤器(列表);
}
可能值得检查一下,它修复了调用方法时的错误(尽管我不明白为什么),但现在我在方法内部出现了一个错误。基本上,我有一个保存结果的列表,我不能向其中添加条目,因为ClassThe O'Reilly“Java Generic and Collections”一书()如果你想了解泛型是如何工作的,这也是一个很好的投资。很好的例子。它开始有了一些意义。最后一行应该是input.get(1).set(value)
(我不允许编辑1个字符)。
public static void main(String[] args) {
List<Class<Throwable>> list =
new ArrayList<Class<Throwable>>();
filter(list);
}