Stay organized with collections
Save and categorize content based on your preferences.
SafeVarargs
public
abstract
@interface
SafeVarargs
implements
Annotation
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:
- the declaration is a fixed arity method or constructor
- the declaration is a variable arity method that is neither
static
nor final
nor private
.
Compilers are encouraged to issue warnings when this annotation
type is applied to a method or constructor declaration where:
Summary
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2025-02-10 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-02-10 UTC."],[],[],null,["# SafeVarargs\n\nAdded in [API level 19](/guide/topics/manifest/uses-sdk-element#ApiLevels) \nSummary: [Inherited Methods](#inhmethods) \n\nSafeVarargs\n===========\n\n\n`\npublic\n\n\nabstract\n@interface\nSafeVarargs\n`\n\n\n`\n\n\nimplements\n\n`[Annotation](/reference/java/lang/annotation/Annotation)`\n\n\n`\n\n|-----------------------|\n| java.lang.SafeVarargs |\n\n\u003cbr /\u003e\n\n*** ** * ** ***\n\nA programmer assertion that the body of the annotated method or\nconstructor does not perform potentially unsafe operations on its\nvarargs parameter. Applying this annotation to a method or\nconstructor suppresses unchecked warnings about a\n*non-reifiable* variable arity (vararg) type and suppresses\nunchecked warnings about parameterized array creation at call\nsites.\n\nIn addition to the usage restrictions imposed by its [@Target](/reference/java/lang/annotation/Target) meta-annotation, compilers are required to implement\nadditional usage restrictions on this annotation type; it is a\ncompile-time error if a method or constructor declaration is\nannotated with a `@SafeVarargs` annotation, and either:\n\n- the declaration is a fixed arity method or constructor\n- the declaration is a variable arity method that is neither `static` nor `final` nor `private`.\n\nCompilers are encouraged to issue warnings when this annotation\ntype is applied to a method or constructor declaration where:\n\n- The variable arity parameter has a reifiable element type, which includes primitive types, `Object`, and `String`. (The unchecked warnings this annotation type suppresses already do not occur for a reifiable element type.)\n- The body of the method or constructor declaration performs potentially unsafe operations, such as an assignment to an element of the variable arity parameter's array that generates an unchecked warning. Some unsafe operations do not trigger an unchecked warning. For example, the aliasing in\n \u003e\n \u003e ```\n \u003e @SafeVarargs // Not actually safe!\n \u003e static void m(List\u003cString\u003e... stringLists) {\n \u003e Object[] array = stringLists;\n \u003e List\u003cInteger\u003e tmpList = Arrays.asList(42);\n \u003e array[0] = tmpList; // Semantically invalid, but compiles without warnings\n \u003e String s = stringLists[0].get(0); // Oh no, ClassCastException at runtime!\n \u003e }\n \u003e \n \u003e ```\n leads to a `ClassCastException` at runtime.\n\n Future versions of the platform may mandate compiler errors for\n such unsafe operations.\n\n\u003cbr /\u003e\n\nSummary\n-------\n\n| ### Inherited methods |\n|-----------------------|---|\n| From interface ` `[java.lang.annotation.Annotation](/reference/java/lang/annotation/Annotation)` ` |-------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | ` abstract `[Class](/reference/java/lang/Class)`\u003c? extends `[Annotation](/reference/java/lang/annotation/Annotation)`\u003e` | ` `[annotationType](/reference/java/lang/annotation/Annotation#annotationType())`() ` Returns the annotation interface of this annotation. | | ` abstract boolean` | ` `[equals](/reference/java/lang/annotation/Annotation#equals(java.lang.Object))`(`[Object](/reference/java/lang/Object)` obj) ` Returns true if the specified object represents an annotation that is logically equivalent to this one. | | ` abstract int` | ` `[hashCode](/reference/java/lang/annotation/Annotation#hashCode())`() ` Returns the hash code of this annotation. | | ` abstract `[String](/reference/java/lang/String) | ` `[toString](/reference/java/lang/annotation/Annotation#toString())`() ` Returns a string representation of this annotation. | ||"]]