Может кто-то объяснить это поведение мне:Java Generic Type Inference Странное поведение?
Примечания: Это T никогда не используется в SomeThingGeneric
public static class SomeThingGeneric<T> {
public List<String> getSomeList() {
return null;
}
}
final SomeThingGeneric<Object> someThingGenericObject = new SomeThingGeneric<Object>();
final SomeThingGeneric<?> someThingGenericWildcard = new SomeThingGeneric<Object>();
final SomeThingGeneric someThingGenericRaw = new SomeThingGeneric<Object>();
for (final String s : someThingGenericObject.getSomeList()) { } // 1 - compiles
for (final String s : someThingGenericWildcard.getSomeList()) { } // 2 - compiles
for (final String s : someThingGenericRaw.getSomeList()) { } // 3 - does not compile!
(1) и (2) компилирует, но (3) не с следующим сообщением:
incompatible types
found : java.lang.Object
required: java.lang.String
Если кому-то нужен полный код, here it is. Я проверил это как в Java 5 и 6.
Возможный дубликат [Почему этот класс ведет себя по-другому, если я не предлагаю общий тип?] (Http://stackoverflow.com/questions/15735235/why-does-this-class-behave-differently-when -i-dont-supply-a-generic-type) –
Тем не менее, вопрос и ответ применимы здесь. (В частности, ответ: «это было сделано для обратной совместимости, и это не должно быть проблемой, потому что вы никогда не должны использовать необработанные типы в новом коде».) –
@wrick 'Ищите ответный рисунок из надежных и/или официальные источники. '- что еще, помимо цитат из JLS, вы хотели бы увидеть? –