package org.testng.annotations; import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.RetentionPolicy.RUNTIME; import org.testng.internal.Parameters; import java.lang.annotation.Retention; import java.lang.annotation.Target; /** * Specifies that the current parameter is optional. TestNG will pass * in a specified default value, or null if none is specified. */ @Retention(RUNTIME) @Target({PARAMETER}) public @interface Optional { /** The default value to pass to this parameter.

The default deserves * a bit of explanation. JSR-175 (which defines annotations) says that * Java annotation parameters can only be ConstantExpressions, which * can be primitive/string literals, but not null.

*

In this case, we use this string as a substitute * for null; in practice, TestNG will pass null * to your code, and not the string "null", if you do not specify * a default value here in this parameter. */ public String value() default Parameters.NULL_VALUE; }