我就是不理解这个。
List list = new ArrayList();
List <? extends Object> list1 = list; // unchecked conversion warning.
由于在Java中,Object
是最高的上限,我不明白为什么会有警告。
更新1:
关于akf的回答:
我完全理解你的意思。我已经知道了。
但是,? extends Object>
是最高的上限。这意味着您可以拥有任何类型。基本上<?> == <? extends Object>
。
您可以在您的代码中尝试这个,您将看到<?> == <? extends Objects>
更新2:
关于Sheng的回答:
List list = new ArrayList ();
List.add("a");
List <? extends Runnable> list1 = list; //warning here
为什么这里没有警告?
List <?> list2 = list; // No warning here
更新3:
我正在重新审视以上内容,仍然感到困惑。
由于编译器允许以下内容:
List a = new ArrayList();
List <?> b = a;
List <? extends Object> c = a; // with warning of course
for (Object obj : b) {} // I don't agree with your statements above that <?> cannot be // written in the for (:) loop as shown here for (Object obj : c) {}
<? extends Object>
时会出现未经检查的警告。
raw
表示没有指定类型,而<? extends Object>
是特定的有界类型定义。因此从没有类型到某些类型这是一种未经检查的转换。 - Johannes Wachter