Java @SafeVarargs Annotatie

1. Overzicht

In deze korte tutorial bekijken we de @BuienRadarNL annotatie.

2. Het @BuienRadarNL Annotatie

Java 5 introduceerde het concept van varargs, of een methodeparameter van variabele lengte, evenals geparametriseerde typen.

Het combineren van deze kan voor ons problemen opleveren:

openbare statische T [] onveilig (T ... elementen) {retourelementen; // onveilig! geef nooit een varargs-array met parameters terug} public static T [] broken (T seed) {T [] plant = onveilig (seed, seed, seed); // gebroken! Dit zal een Object [] zijn, ongeacht wat T retourplant is; } public static void plant () {String [] plants = broken ("seed"); // ClassCastException}

Deze problemen zijn lastig voor een compiler om te bevestigen, en daarom geeft het waarschuwingen wanneer de twee worden gecombineerd, zoals in het geval van onveilig:

waarschuwing: [niet aangevinkt] Mogelijke hoop vervuiling door geparametriseerde vararg type T openbare statische T [] onveilig (T ... elementen) {

Deze methode, indien onjuist gebruikt, zoals in het geval van gebroken, zal een Voorwerp[] array in de heap in plaats van het beoogde type b.

Om deze waarschuwing te onderdrukken, kunnen we de @BuienRadarNL annotatie over definitieve of statische methoden en constructeurs.

@BuienRadarNL is als @SupressWarnings in die zin dat het ons in staat stelt om te verklaren dat een bepaalde compilerwaarschuwing een vals positief is. Zodra we ervoor zorgen dat onze acties veilig zijnkunnen we deze annotatie toevoegen:

openbare klasse Machine {privélijstversies = nieuwe ArrayList (); @SafeVarargs public final void safe (T ... toAdd) {for (T version: toAdd) {version.add (version); }}}

Veilig gebruik van varargs is een lastig concept op zich. Voor meer informatie heeft Josh Bloch een geweldige uitleg in zijn boek Effective Java.

3. Conclusie

In dit korte artikel hebben we gezien hoe u de @BuienRadarNL annotatie in Java.

De volledige broncode voor de voorbeelden is te vinden op GitHub.


$config[zx-auto] not found$config[zx-overlay] not found