Ответ 1
Загрязнение кучи - это термин, который относится к типу, указывающему на объект, который не является супертипом при использовании varargs с общим типом. Это происходит, когда переменная параметризованного типа относится к объекту, который не относится к этому параметризованному типу. Это сообщение о переполнении стека объясняет вам, что именно это означает и что вам следует делать, и дает подробную информацию об аннотации @SafeVarargs
. Таким образом, в интерфейсе ICache
тип vararg O
указывает на Object
в вашем интерфейсе, но O
не является супертипом Object
, и это порождает предупреждение о загрязнении кучи. Обратите внимание на то, как он говорит о возможном загрязнении кучи. Если ваш код не вызывает никаких проблем, например, приводит к ClassCastException
, он, вероятно, будет безопасным и не загрязняет кучу, но компилятор не может доказать это и не может проверить правильность операции, поэтому он все равно будет сгенерировать предупреждение. На самом деле это определение непроверенного предупреждения: когда правильность операции с параметризованным типом не может быть проверена. См. эту страницу Oracle для невосстанавливаемых типов для получения дополнительной информации. Если вы не хотите получать это предупреждение, вы можете предотвратить его с помощью SafeVarargs
или просто подавить его, добавив @SuppressWarnings ({"unchecked", "varargs"})
к объявлению метода, но вы не получите предупреждение в том случае, если метод действительно небезопасен.