Я просто хочу добавить один пример такого непроверенного предупреждения, которое я вижу довольно часто. Если вы используете классы, реализующие интерфейс типа Serializable, часто вы будете вызывать методы, возвращающие объекты интерфейса, а не фактический класс. Если возвращаемый класс должен быть применен к типу, основанному на дженериках, вы можете получить это предупреждение.
Вот краткий (и несколько глупый) пример для демонстрации:
import java.io.Serializable;
public class SimpleGenericClass<T> implements Serializable {
public Serializable getInstance() {
return this;
}
// @SuppressWarnings("unchecked")
public static void main() {
SimpleGenericClass<String> original = new SimpleGenericClass<String>();
// java: unchecked cast
// required: SimpleGenericClass<java.lang.String>
// found: java.io.Serializable
SimpleGenericClass<String> returned =
(SimpleGenericClass<String>) original.getInstance();
}
}
getInstance () возвращает объект, который реализует Serializable. Это должно быть отлито для фактического типа, но это непроверенный литой.