Spec-Zone.ru › OpenJDK 25

Интерфейс аннотации SafeVarargs

@Documented @Retention(RUNTIME) @Target({CONSTRUCTOR,METHOD}) public @interface SafeVarargs
Утверждение программиста о том, что тело аннотированного метода или конструктора не выполняет потенциально небезопасных операций с параметром переменной арности. Применение этой аннотации к методу или конструктору подавляет предупреждения о непроверяемых операциях с нереифицируемым типом переменной арности (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 Формальные параметры
9.6.4.7 @SafeVarargs
Начиная с версии:
1.7

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, которая содержит более подробные описания для разработчиков, включая обзоры концепций, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

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

Spec-Zone.ru

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