Anotácia Java @SafeVarargs
1. Prehľad
V tomto rýchlom výučbe sa pozrieme na @SafeVarargs anotácia.
2. The @SafeVarargs Anotácia
Java 5 predstavila koncept varargs alebo parameter metódy s premennou dĺžkou, ako aj parametrizované typy.
Ich kombinácia nám môže spôsobiť problémy:
public static T [] nebezpečný (T ... prvky) {návratové prvky; // nebezpečné! nikdy nevracajte parametrizované pole varargs} verejné statické T [] nefunkčné (T semeno) {T [] rastlina = nebezpečné (semeno, semeno, semeno); // zlomené! Toto bude Objekt [] bez ohľadu na to, čo T je návratová rastlina; } public static void plant () {String [] plants = broken ("seed"); // ClassCastException}
Tieto problémy sú pre kompilátora zložité na potvrdenie, a preto bude varovať vždy, keď dôjde k ich skombinovaniu, ako napríklad v prípade nebezpečné:
varovanie: [nezačiarknuté] Možné znečistenie haldy z parametrického vararg typu T verejné statické T [] nebezpečné (T ... prvky) {
Táto metóda, ak sa používa nesprávne, ako v prípade zlomený, bude znečisťovať Objekt [] pole do haldy namiesto zamýšľaného typu b.
Na potlačenie tohto varovania môžeme pridať znak @SafeVarargs anotácia na finálnych alebo statických metódach a konštruktoroch.
@SafeVarargs je ako @SupressWarnings v tom, že nám umožňuje vyhlásiť, že varovanie konkrétneho prekladača je falošne pozitívne. Len čo zaistíme bezpečnosť našich akcií, môžeme pridať túto anotáciu:
verejná trieda Stroj {verzie súkromného zoznamu = nový ArrayList (); @SafeVarargs public final void safe (T ... toAdd) {for (T version: toAdd) {versions.add (version); }}}
Bezpečné použitie varargov je sama o sebe zložitá koncepcia. Pre viac informácií má Josh Bloch skvelé vysvetlenie vo svojej knihe Effective Java.
3. Záver
V tomto rýchlom článku sme videli, ako používať @SafeVarargs anotácia v Jave.
Celý zdrojový kód príkladov nájdete na GitHub.