首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原始类型、无界通配符和有界通配符

原始类型、无界通配符和有界通配符
EN

Stack Overflow用户
提问于 2010-08-16 08:54:38
回答 1查看 264关注 0票数 2

我有一个简单的问题如下:这里有一个关于整个问题的简单示例:

代码语言:javascript
复制
List a = new ArrayList();
List <?> b;
List <? extends Object> c;

根据哈立德·莫卧儿的Java SCJP (一本非常好的书!):

代码语言:javascript
复制
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吗?

EN

回答 1

Stack Overflow用户

发布于 2010-08-16 09:15:15

根据this page的说法,如果我正确理解了您的问题(我真的不这么认为),那么在两个实例中,与原始类型的交互可能会导致出现未经检查的警告

如果擦除更改了原始类型的任何参数的任何类型,则原始类型的方法或构造函数的调用将生成未检查的警告;如果擦除更改了字段的类型,则对原始类型的字段的constructor.

  • An赋值将生成未检查的警告(§5.1.9)。

所以你的问题的答案似乎基本上是“在原始类型存在的情况下,erasure可能会导致未经检查的警告”。据我所知,这最有可能发生在使用嵌套类型时-我在擦除的定义中看不到其他任何可能导致类型更改的地方,但也许其他人可以建议这是否是这种情况的根源。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3489947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档