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.