/ / Intellij Предупреждение - Generic Unchecked Присвояване [дубликат] - java, родове, без отметка

Intellij Предупреждение - Generic Unchecked Assignment [дубликат] - java, генерични, без отметки

Възможно дублиране:
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

След като се играе с токени от супер тип за това, азНе мислете, че можете да направите този тип безопасен, без да правите допълнителни методи за извличане на колекции от кеша и проверка дали съдържанието им е от правилния тип.

Вашите опции са:

  1. Правейки горното, което изглежда трудно
  2. Потискайте непроверените подадени в клиентския код, ако знаете, че това е правилно.
  3. Заменете кода на клиента с List<?> refObject = cache.getCachedRefObject(cacheKey, List.class);

Единственият вариант за безопасен тип е 3.в това, че ви предпазва от извършване на операции, които компилаторът може да докаже, са безопасни за типа.


3 за отговор № 2

Изглежда, че имате стара версия на IntelliJ. Това предупреждение наистина означава Java 5.0+ и AFAIK, това беше променено, когато IntelliJ поддържаше Java 6, така че предупреждението беше там, но не каза "само JDK 5.0" (сега има поддръжка за Java 8)