Я просто хочу добавить один пример неконтролируемого предупреждения, которое я вижу довольно часто. Если вы используете классы, которые реализуют интерфейс, такой как 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. Это должно быть приведено к фактическому типу, но это непроверенное приведение.