我已经对这个问题打了一段时间,以为也许有一些新鲜的眼睛会看到这个问题。谢谢你的时间。
import java.util.*; class Tbin<T> extends ArrayList<T> {} class TbinList<T> extends ArrayList<Tbin<T>> {} class Base {} class Derived extends Base {} public class Test { public static void main(String[] args) { ArrayList<Tbin<? extends Base>> test = new ArrayList<>(); test.add(new Tbin<Derived>()); TbinList<? extends Base> test2 = new TbinList<>(); test2.add(new Tbin<Derived>()); } }
使用Java8。在我看来,直接在中创建容器test等效于中的容器test2,但编译器会说:
test
test2
Test.java:15: error: no suitable method found for add(Tbin<Derived>) test2.add(new Tbin<Derived>()); ^
我该怎么写Tbin,TbinList所以最后一行是可以接受的?
Tbin
TbinList
注意,实际上我将添加typed Tbin,这就是为什么我Tbin<Derived>在最后一行中指定了原因。
Tbin<Derived>
好的,这是答案:
import java.util.*; class Tbin<T> extends ArrayList<T> {} class TbinList<T> extends ArrayList<Tbin<? extends T>> {} class Base {} class Derived extends Base {} public class Test { public static void main(String[] args) { TbinList<Base> test3 = new TbinList<>(); test3.add(new Tbin<Derived>()); } }
正如我所期望的,一旦我看到它就很明显了。但是要到达这里要花很多时间。如果仅查看工作代码,则Java泛型看起来很简单。
谢谢大家,成为共鸣。