
在第一种情况下,您有两个具有名为的类型参数的泛型方法
T,但是这些类型参数是不同的,因此让我们为其分配不同的名称:
public <E> List<E> getList() { ... }public <T> void first() { ... }然后,它的工作方式如下:
的元素
List<T>
(即type的对象T
)分配给type的变量T
,因此一切正常:List<T> ret = new ArrayList<T>();
T t1 = ret.get(0);
首先,将类型的对象
List<E>
分配给List<T>
。该语句工作得很好,因为类型参数E
是从赋值左侧的类型推断出来的,所以T
=E
。然后,它与前面的情况一样工作:List<T> list = getList();
T t2 = list.get(0);
在这种情况下,您尝试将type的对象分配给type
E
的变量T
,但是E
无法进行推断并因此假定为Object
,因此分配失败:T t3 = getList().get(0);
您可以通过手动绑定
E来解决此问题
T:
T t3 = this.<T>getList().get(0);
在泛型类的情况下,
TestGenerics<T>您没有两个独立的类型参数,因此
T这两种方法都引用相同的类型。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)