我有一个简单的问题如下:这里有一个关于整个问题的简单示例:
List a = new ArrayList();
List <?> b;
List <? extends Object> c;根据哈立德·莫卧儿的Java SCJP (一本非常好的书!):
a = b; // ok. Widening conversion.
b = a; // ok too. No unchecked warning.
b = c; // ok
c = b; // ok
c=a; // ok but now will issue a unchecked warning. // clause 1我确实理解,任何原始类型(例如a)在分配给任何绑定的通配符引用时,都会出现未检查的警告(因为原始类型a中的内容可以是任何内容)。
我的问题是,因为c是最高上界(?扩展对象),难道不应该在没有警告的情况下将a赋值给c吗?
发布于 2010-08-16 09:15:15
根据this page的说法,如果我正确理解了您的问题(我真的不这么认为),那么在两个实例中,与原始类型的交互可能会导致出现未经检查的警告
如果擦除更改了原始类型的任何参数的任何类型,则原始类型的方法或构造函数的调用将生成未检查的警告;如果擦除更改了字段的类型,则对原始类型的字段的constructor.
所以你的问题的答案似乎基本上是“在原始类型存在的情况下,erasure可能会导致未经检查的警告”。据我所知,这最有可能发生在使用嵌套类型时-我在擦除的定义中看不到其他任何可能导致类型更改的地方,但也许其他人可以建议这是否是这种情况的根源。
https://stackoverflow.com/questions/3489947
复制相似问题