Spec-Zone.ru › OpenJDK 17

Интерфейс аннотаций 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 во время выполнения.

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

См. Спецификацию языка Java:
4.7 Реализуемые типы
8.4.1 Формальные параметры
@SafeVarargs
С:
1.7

© 1993, 2021, 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/17/docs/api/java.base/java/lang/SafeVarargs.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API