Java @SafeVarargs Megjegyzés
1. Áttekintés
Ebben a gyors bemutatóban megnézzük a @SafeVarargs annotáció.
2. A @SafeVarargs Megjegyzés
A Java 5 bevezette a varargs vagy egy változó hosszúságú metódus-paraméter fogalmát, valamint a paraméterezett típusokat.
Ezek kombinálása problémákat okozhat számunkra:
public static T [] nem biztonságos (T ... elemek) {return elemek; // nem biztonságos! soha ne adja vissza a paraméterezett varargs tömböt} public static T [törött (T mag) {T [] növény = nem biztonságos (mag, mag, mag); // törött! Ez egy Object lesz [], függetlenül attól, hogy mi a T visszatérő üzem; } public static void plant () {String [] növények = törött ("mag"); // ClassCastException}
Ezeket a problémákat egy fordítónak nehéz megerõsítenie, ezért figyelmeztetõket ad, ha a kettõt kombináljuk, például a nem biztonságos:
figyelmeztetés: [nem ellenőrzött] Lehetséges halomszennyezés a paraméterezett vararg típusú T típusú nyilvános statikus T [] nem biztonságos (T ... elemek) {
Ez a módszer, ha helytelenül használják, mint a törött, szennyezni fog egy Tárgy[] tömböt a halomba a tervezett típus helyett b.
A figyelmeztetés összezárásához hozzáadhatjuk a @SafeVarargs annotáció végleges vagy statikus módszerekről és konstruktorokról.
@SafeVarargs olyan, mint @SupressWarnings annyiban, hogy kijelenthetjük, hogy egy adott fordító figyelmeztetése hamis pozitív. Amint biztosítjuk cselekedeteink biztonságát, hozzáadhatjuk ezt a megjegyzést:
public class Machine {privát lista verziói = new ArrayList (); @SafeVarargs public final void safe (T ... toAdd) {for (T version: toAdd) {version.add (version); }}}
A varargok biztonságos használata önmagában is trükkös fogalom. További információ: Josh Bloch nagyszerű magyarázattal szolgál az Effective Java című könyvében.
3. Következtetés
Ebben a gyors cikkben láttuk, hogyan kell használni a @SafeVarargs annotáció Java-ban.
A példák teljes forráskódja megtalálható a GitHub oldalon.