Тип аннотации SafeVarargs

@Documented
@Retention(RUNTIME)
@Target({CONSTRUCTOR,METHOD})
public @interface SafeVarargs

Программа утверждает, что тело аннотированного метода или конструктора не выполняет потенциально небезопасные операции с параметром varargs. Применение этой аннотации к методу или конструктору подавляет предупреждения о нереализуемом переменном количестве аргументов (vararg) и подавляет предупреждения о создании параметризованного массива в местах вызова.

В дополнение к ограничениям на использование, накладываемым мета-аннотацией @Target, компиляторы обязаны реализовать дополнительные ограничения на использование этого типа аннотации; это ошибка времени компиляции, если объявление метода или конструктора аннотировано аннотацией @SafeVarargs, и при этом:

  • объявление является методом или конструктором с фиксированным числом аргументов
  • объявление является методом с переменным числом аргументов, который не является static и не является final и не является private.

Компиляторы рекомендуют выдавать предупреждения, когда этот тип аннотации применяется к объявлению метода или конструктора, где:

  • параметр переменного числа аргументов имеет реализуемый элементный тип, который включает примитивные типы, Object, и String. (Подавляемые этим типом аннотации предупреждения о небезопасности не возникают для реализуемого элементарного типа.)
  • тело объявления метода или конструктора выполняет потенциально небезопасные операции, такие как присвоение элемента массива параметра переменного числа аргументов, которое генерирует предупреждение о небезопасности. Некоторые небезопасные операции не вызывают предупреждение о небезопасности. Например, алиасинг в
    @SafeVarargs // Not actually safe!
    static void m(List<String>... stringLists) {
      Object[] array = stringLists;
      List<Integer> tmpList = Arrays.asList(42);
      array[0] = tmpList; // Semantically invalid, but compiles without warnings
      String s = stringLists[0].get(0); // Oh no, ClassCastException at runtime!
    }
    приводит к ClassCastException во время выполнения.

    В будущих версиях платформы такие небезопасные операции могут стать ошибками компиляции.

С:
1.7

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/SafeVarargs.html

Spec-Zone .ru
спецификации, руководства, описания, API