Puisqu'il n'y a toujours pas d'annotation standard @Nullable
, vous utilisez une annotation d'une bibliothèque tierce, cela dépend donc de la façon dont elle est déclarée. Les annotations antérieures à Java 8 ne sont pas des annotations de type car cette fonctionnalité n'existe pas dans les anciennes versions. Par conséquent, avec ces annotations, vous annotez toujours le paramètre plutôt que son type. Ceci est généralement interprété par les frameworks comme "le paramètre peut être null
" qui serait la référence du tableau, bien que les frameworks puissent traiter les varargs spécialement, mais il n'y a pas de standard imposant un comportement particulier.
Lorsque vous utilisez une réelle annotation de type Java 8, à savoir une annotation avec @Target(ElementType.TYPE_USE)
, le résultat au mieux expliqué en utilisant la déclaration de tableau ordinaire:
@Nullable ElementType []
déclare un tableau de @Nullable ElementType
, lisez des éléments nullables alors que
ElementType @Nullable []
déclare un type de tableau pouvant être validé.
ainsi, la déclaration
public static String format(final String pattern, final @Nullable Object... arguments)
implique que les éléments peuvent être null
alors
public static String format(final String pattern, final Object @Nullable... arguments)
déclare que la référence du tableau peut être null
. Bien sûr, vous pouvez les combiner pour déclarer que deux, les éléments ou le tableau lui-même, peut être null
public static String format(String pattern, @Nullable Object @Nullable ... arguments)
Comme l'a dit, d'utiliser ces options, vous avez besoin d'un type d'annotation qui est vraiment déclarée comme Annotation de type Java 8 Ensuite, pour appliquer la sémantique décrite, vous avez besoin d'une implémentation de framework de vérification mise à jour compatible avec les annotations de type Java 8.
Les annotations de type ont été ajoutées dans Java 8 dans le cadre de JSR 308. – Tunaki