Възможно дублиране:
Java Generics, как да се избегне непроверено предупреждение за присвояване, когато се използва йерархията на класове?
Intellij ми дава предупреждението по-долу. Не съм сигурен как да го разрешим, или дори ако трябва да го разреша. Предупреждаващите детайли казват, че се отнася само за JDK 5, а аз използвам 6. Чудя се дали трябва да отговоря на това и ако да, как?
Повикване на метод, предизвикващо предупреждение
List<T> refObject = cache.getCachedRefObject(cacheKey, List.class);
Извиква се метод
public <T> T getCachedRefObject(String objectKey, Class<T> type) {
return type.cast(refObjectCache.get(objectKey));
}
Подробности за предупрежденията
Unchecked Assignment
JDK 5.0 only. Signals places where an unchecked warning is issued by the compiler, for example:
void f(HashMap map) {
map.put("key", "value");
}
Отговори:
0 за отговор № 1След като се играе с токени от супер тип за това, азНе мислете, че можете да направите този тип безопасен, без да правите допълнителни методи за извличане на колекции от кеша и проверка дали съдържанието им е от правилния тип.
Вашите опции са:
- Правейки горното, което изглежда трудно
- Потискайте непроверените подадени в клиентския код, ако знаете, че това е правилно.
- Заменете кода на клиента с
List<?> refObject = cache.getCachedRefObject(cacheKey, List.class);
Единственият вариант за безопасен тип е 3.в това, че ви предпазва от извършване на операции, които компилаторът може да докаже, са безопасни за типа.
3 за отговор № 2
Изглежда, че имате стара версия на IntelliJ. Това предупреждение наистина означава Java 5.0+ и AFAIK, това беше променено, когато IntelliJ поддържаше Java 6, така че предупреждението беше там, но не каза "само JDK 5.0" (сега има поддръжка за Java 8)