@Documented @Retention(value=RUNTIME) @Target(value={CONSTRUCTOR,METHOD}) public @interface SafeVarargs
In addition to the usage restrictions imposed by its @Target meta-annotation, compilers are required to implement
additional usage restrictions on this annotation type; it is a
compile-time error if a method or constructor declaration is
annotated with a @SafeVarargs annotation, and either:
static nor final.
Compilers are encouraged to issue warnings when this annotation type is applied to a method or constructor declaration where:
Object, and String.
(The unchecked warnings this annotation type suppresses already do
not occur for a reifiable element type.)
@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!
}
leads to a ClassCastException at runtime.
Future versions of the platform may mandate compiler errors for such unsafe operations.
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.
Scripting on this page tracks web page traffic, but does not change the content in any way.