我正在使用 GuavaTypeToken
类来测试是否可以将任意类型的实例分配给其他类型的对象。
在下面的代码片段中,我正在测试声明为List
的类型是否可以从 分配List<String>
,反之亦然:
TypeToken rawListType = new TypeToken<List>(){};
TypeToken parameterizedListType = new TypeToken<List<String>>(){};
System.out.println(rawListType.isAssignableFrom(parameterizedListType)); //true
System.out.println(parameterizedListType.isAssignableFrom(rawListType)); //false
为什么第二次调用isAssignableFrom
返回false
?,鉴于下面的代码确实编译,所以我可以List<String>
从List
(带有警告)分配?:
List l = null;
List<String> l2 = null;
l = l2;
l2 = l; //Type Safety Warning
我的直觉是,如果这些类型的实例可以在没有警告的情况下分配(?),番石榴正在回答。如果这是正确的,我如何检查编译器意义上的可分配性,允许我将一个对象分配给另一个对象(有或没有警告),就像第二个代码片段中显示的那样?