Я просто этого не понимаю.
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 coursefor (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>