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:

Java 7 Tage Project Coin – Automatisches Ressourcen Management

Project Coin stellt eine Sammlung von Neuerungen in der Java Welt dar. Was davon in Java 7 auf uns zukommt, und was das für Streams bedeutet steht hier.

Als vorletzte Verbesserung aus Project Coin in Java 7, welche ich in meinem Blog präsentieren möchte, will ich eine der interessantesten vorstellen. Die Behandlung von Streams und Closable Ressourcen haben ein verbessertes Handling im Try Block erfahren.

close() ist geschichte

Musste man bisher bei den diversen Streams, wie zB den FileInputStream, in einem try-catch-finally block selbst für das Schließen des Blocks sorgen, wird dies nun über neue Interface AutoCloseable geregelt. Dabei fällt nicht nur der finally Block weg, sogar der catch Block ist optional:

    try(InputStream is = new FileInputStream(source); OutputStream os = new FileOutputStream(target)){
        // read / write
    }

Erweiterungen an java.lang.Throwable sorgen dafür dass nach dem try Block automatisch die Streams geschlossen werden. Spart man sich dabei den catch Block werden dabei auftretende Exceptions sogar komplett unterdrückt und kommen nicht zu Tage.

Im try Block lassen sich wie im Beispiel aufgezeigt ein oder mehrere AutoCloseable Ressourcen gleichzeitig deklarieren.

Happy Coding

Ähnliche Artikel:

Java 7 Tage Project Coin – Exceptions Exceptions Exceptions

Project Coin stellt eine Sammlung von Neuerungen in der Java Welt dar. Was davon in Java 7 auf uns zukommt, und was bei den Exceptions genau neu ist gibts hier.

Donnerstag ist Exception Tag, im heutigen Teil der Java 7 Neuerungen geht es um ein erweitertes Exception Handling, eine kleine Verbesserung aus dem Project Coin. Es heißt übrigends deshalb Project Coin, da das Wort Coin für Kleingeld, Körberlgeld steht und somit nur als kleine Beigaben zu sehen sind. Interessanterweise finden gerade diese Neuerungen überall am meisten Gehör. Vielleicht weil sie sich schnell und knackig präsentieren lassen, wie hier in meinem Blog. Oder weil sie wohl für die breite Masse der Entwickler von Anfänger bis alten Hasen relevant sein werden.

Multi-Catch Exception

Musste bisher jede Exception einzeln abgefangen werden:

    try{
        functionWithException();
    } catch (FileNotFoundException fnfe) {
        fnfe.printStackTrace();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }

konnte s zu redundanten Fehlerbehandlungen kommen, wo eine Verallgemeinerung der Exception nicht zielführend war. In Java 7 lassen sich nun mehrere ExceptionTypen in einer catch-Klausel fangen

    try{
        functionWithException();
    } catch (FileNotFoundException | IOException e) {
        e.printStackTrace();
}

Präzisere Exceptions

Fängt man eine Exception oder ein Throwable (also eine Generische Exception) in einem catch Block mit einem vorgestellten final ab, kann man eine weitere Exception werfen lassen, diese wird dabei jedoch zur Compilezeit präzisiert. D.h. es wird ermittelt welche exakte Exception/Thorwable auftreten kann. Es reicht damit aus diese an der Methodendeklaration zu nennen.

public void getTheThrow() throws ThrowableA, ThrowableB{
    try {
      throwAorB();
     } catch (final Throwable t) {
       throw t; // throws a named exception, not Throwable
    }
}

Dadurch bleibt die Behandlung im Code allgemein, und für denjenigen der die Methode einmal verwendet wurde jedoch die API eingeschränkt. Vor Java 7 hätte man hierbei einen Compile-Error erhalten.

Happy Coding

Ähnliche Artikel:

Java 7 Tage Project Coin – generische Generics

Project Coin stellt eine Sammlung von Neuerungen in der Java Welt dar. Was davon in Java 7 auf uns zukommt, welche Verbesserungen Generics erfahren steht hier

Wieder eine Neuerung in Java 7 und wieder kommt sie aus dem Project Coin. Kurz und knackig:

Diamond-Operator

Bisher mussten Typen immer redundant deklariert werden:

Set<String> msg = new HashSet<String>();

Dies kann man sich zukünftig sparen, was vielleicht zu einem lesbareren, zumindest zu einem kürzeren Code führt

Set<String> msg = new HashSet<>();

Happy Coding

Ähnliche Artikel:

Java 7 Tage Project Coin – Neue Schreibweisen bei numerischen Literalen

Project Coin stellt eine Sammlung von Neuerungen in der Java Welt dar. Was davon in Java 7 auf uns zukommt, und welche zusätzlichen Literale es gibt steht hier.

Seit heute ist es fix, Java 7 kommt. Das JSR 334 (das zuletzt beschriebenes Project Coin) wurde einstimmig angenommen. http://www.jcp.org/en/jsr/results?id=5223 Damit steht der Veröffentlichung nichts mehr im Wege und wir können uns weiter den Feinheiten der neuen Version widmen.

Das heutige Thema im Bereich der Neuerungen von Java 7 bezieht sich auf eine weitere Verbesserung aus Project Coin, und zwar gibt es nun weitere Schreibweisen für nummerische Literale

Unterstrich zum Auftrennen von Zahlen

Die Überschrift und das Beispiel erklären sich hierbei eigentlich von selbst.

public void unterstrich(){
    int bigNumber = 1234567;
    int bigNumberUnder = 1_234_567; // new

    if (bigNumber == bigNumberUnder){
        System.out.println(true);
    } else {
        System.out.println(false);
    }
}

Binäre Literale

Zusätzlich lassen sich nun auch binäre Literale verwenden

    int x = 0b1000;
    if(x == 8)
        System.out.println(true);
    else
        System.out.println(false);

Happy Coding

Ähnliche Artikel: