Spec-Zone.ru › OpenJDK 8

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


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

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

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

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

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

  • Параметр с переменным числом аргументов имеет реализуемый тип элемента, который включает примитивные типы, 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.

Spec-Zone.ru

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