Spec-Zone.ru › OpenJDK 24

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

@Documented @Retention(RUNTIME) @Target({CONSTRUCTOR,METHOD}) public @interface SafeVarargs
Программа утверждает, что тело аннотированного метода или конструктора не выполняет потенциально небезопасные операции с параметром varargs. Применение этой аннотации к методу или конструктору подавляет предупреждения о нереализуемом (non-reifiable) типе переменной арности (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 Реализуемые типы (Reifiable Types)
8.4.1 Формальные параметры (Formal Parameters)
@SafeVarargs
С:
1.7

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/lang/SafeVarargs.html

Spec-Zone.ru

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