我有一个T类型的泛型类,它使用T读写方法.让我们在列表中加以说明.
当我将其与通配符类型一起使用时,我会遇到一个特定的问题:
List<?> list = ...
list.add(list.get(0)); //here I get a compiler error
据我所知,Java编译器应该在内部将类型存储为"capture of?"它应该认识到,add/get中使用的类型是匹配的.
如果这是不可能做到的,那么"最好"的解决方法是什么?我的 idea :
-
Helper methods
private <S> void aaa(List<S> list) { list.add(list.get(0)); }
这是可行的,但将这些方法用于所有可能的组合是不切实际的.
-
Casting
List<?> list; private <S> void aaa() { List<S> list = (List<S>)this.list list.add(list.get(0)); }
这同样有效,但我也不喜欢,而且我收到了unchecked cast条警告.
-
Creating type
class Foo<T> { List<T> list; private void aaa() { list.add(list.get(0)); } }
这也行得通,但仅仅为了这个目的定义一个类型似乎太过分了.
谢谢你的 idea !