Java 7 Tage Project Coin – Simplified Varargs Method Invocation

Project Coin stellt eine Sammlung von Neuerungen in der Java Welt dar. Was davon in Java 7 auf uns zukommt, und was bei Varargs Methoden neu ist steht hier.


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:

Autor: Thomas Pummer

Thomas Pummer ist Softwareentwickler an der Universität Wien. In seiner Freizeit betreut er das Open Source Projekt TrayRSS und werkt an diversen anderen kleinen Projekten. Er ist sehr interessiert an Open Source und Webentwicklung und testet gern neue Programmiersprachen.

Ein Gedanke zu „Java 7 Tage Project Coin – Simplified Varargs Method Invocation“

  1. 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.

*