Я просто этого не понимаю.
List list = new ArrayList();
List <? extends Object> list1 = list; // unchecked conversion warning.
Так как Object
- это верхняя верхняя граница Java, я не вижу причин, по которым это предупреждение.
Обновление 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) {}
Оба допустимы. Поэтому я до сих пор не понимаю, почему неконтролируемое предупреждение при настройке raw на <? extends Object>