nullpointer.at

Java 7 Tage Project Coin – Simplified Varargs Method Invocation


Abschließend möchte ich in meiner Java 7 Project Coin Woche die Simplified Varargs Method Invocation erklären.

Das unchecked Ärgernis

Varargs steht für eine Variable Anzahl von Argumenten beim Aufruf einer Methode. Beim Aufruf einer solchen Methode mit einer Variable von einem non-reifiable Typen (E, List) hat der Compiler bisher eine Warnung “unchecked” erzeugt. Diese Warnung wurde nun vom Aufruf in die Methodendeklaration verschoben. “unsafe operation”-Warnungen des Compilers können nun mit @SuppressWarnings(“varargs”) unterdrückt werden, während eine neue Annotation @SafeVarargs bei

  • java.util.Arrays#asList(T… a)
  • java.util.Collections#addAll(Collection<? super T> c, T… elements)
  • java.util.EnumSet.of(E first, E… rest)
  • javax.swing.SwingWorker.publish(V… chunks)

die CompilorWarnungen beim Verwenden von Varargs mit Collections unterdrückt.

Dabei bin ich recht gespannt wie es sich anfühlt, muss ich eingestehen dass ich mich damit bisher am wenigsten beschäftigt habe. Vielleicht hat ja einer der Leser da etwas Erfahrung oder ein passendes Codebeispiel?

Happy Coding

Ähnliche Artikel:


Beitrag veröffentlicht

in

von

Kommentare

Eine Antwort zu „Java 7 Tage Project Coin – Simplified Varargs Method Invocation“

  1. Avatar von Steffen Wappler
    Steffen Wappler

    Here is an example:

    public class ArrayBuilder {

    public static void addToList (List listArg, T… elements) {
    for (T x : elements) {
    listArg.add(x);
    }
    }

    @SuppressWarnings({„unchecked“, „varargs“})
    public static void addToList2 (List listArg, T… elements) {
    for (T x : elements) {
    listArg.add(x);
    }
    }

    @SafeVarargs
    public static void addToList3 (List listArg, T… elements) {
    for (T x : elements) {
    listArg.add(x);
    }
    }

    // …

    }

    public class HeapPollutionExample {

    // …

    public static void main(String[] args) {

    // …

    ArrayBuilder.addToList(listOfStringLists, stringListA, stringListB);
    ArrayBuilder.addToList2(listOfStringLists, stringListA, stringListB);
    ArrayBuilder.addToList3(listOfStringLists, stringListA, stringListB);

    // …

    }
    }

    The Java compiler generates the following warnings for this example:

    addToList:
    At the method’s declaration: [unchecked] Possible heap pollution from parameterized vararg type T
    When the method is called: [unchecked] unchecked generic array creation for varargs parameter of type List[]
    addToList2: When the method is called (no warning is generated at the method’s declaration): [unchecked] unchecked generic array creation for varargs parameter of type List[]
    addToList3: No warnings are generated either at the method’s declaration or when it is called.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*