public
abstract
@interface
SafeVarargs
implements
Annotation
java.lang.SafeVarargs |
A programmer assertion that the body of the annotated method or constructor does not perform potentially unsafe operations on its varargs parameter. Applying this annotation to a method or constructor suppresses unchecked warnings about a non-reifiable variable arity (vararg) type and suppresses unchecked warnings about parameterized array creation at call sites.
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.)
leads to a@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
at runtime.
Future versions of the platform may mandate compiler errors for such unsafe operations.
Inherited methods | |
---|---|
From
interface
java.lang.annotation.Annotation
|