Zu den Details siehe https://developers.redhat.com/blog/2019/11/11/new-features-in-red-hat-codeready-studio-12-13-0-ga-and-jboss-tools-4-13-0-final-for-eclipse-2019-09/
Bei der Update-Liste ist allerdings das meiste von Eclipse …
Zu den Details siehe https://developers.redhat.com/blog/2019/11/11/new-features-in-red-hat-codeready-studio-12-13-0-ga-and-jboss-tools-4-13-0-final-for-eclipse-2019-09/
Bei der Update-Liste ist allerdings das meiste von Eclipse …
int[] ints1 = { 0 };
int[] ints2 = { 1,2 };
int[] ints3 = { };
int[] ints4 = { 3 };
int[] ints = Stream.of(ints1, ints2, ints3, ints4).flatMapToInt(IntStream::of).toArray();
System.out.println(Arrays.toString( ints ));
Die append(…)-Methoden bei StringBuilder liefern die this-Referenz, sodass sich Folgendes schreiben lässt:
StringBuilder sb = new StringBuilder(); sb.append( "Android oder iPhone" ).append( '?' );
Jedes append(…) liefert das StringBuilder-Objekt, auf dem es aufgerufen wird – wir können also Methoden kaskadiert anhängen oder es bleiben lassen.
Wir wollen diese Möglichkeit bei einem Zauberer (Klasse Wizard) programmieren, sodass die Methoden name(String) und age(int) Spielername und Alter zuweisen. Beide Methoden liefern ihr eigenes Wizard-Objekt über die this-Referenz zurück:
class Wizard {
String name = "";
int age;
Wizard name( String name ) { this.name = name; return this; }
String name() { return name; }
Wizard age( int item ) { this.age = item; return this; }
int age() { return age; }
String format() {
return name + " ist " + age;
}
}
Erzeugen wir einen Wizard, und kaskadieren wir einige Methoden:
Wizard gundalf = new Wizard().name( "Gundalf" ).age( 60 ); System.out.println( gundalf.name() ); // Gundalf System.out.println( gundalf.format() ); // Gundalf ist 60
Der Ausdruck new Wizard() liefert eine Referenz, die wir sofort für den Methodenaufruf nutzen. Da name(String) wiederum eine Objektreferenz vom Typ Wizard liefert, ist dahinter direkt .age(int) möglich. Die Verschachtelung von name(„Gunalf“).age(60) bewirkt, dass Name und Alter gesetzt werden und der jeweils nächste Methodenaufruf in der Kette über this eine Referenz auf dasselbe Objekt, aber mit verändertem internem Zustand bekommt.
Beispiele dieser Bauart sind in der Java-Bibliothek an einigen Stellen zu finden. Sie werden auch Builder genannt.
Hinweis: Die Methode Wizard name(String) ist mit ihrer Rückgabe praktisch, verstößt aber aus zwei Gründen gegen die JavaBeans-Konvention: Setter dürfen keine Rückgabe haben und müssen immer mit set beginnen. JavaBeans sind also nicht so dieser kompakten Builder-Schreibweise „kompatibel“.
Ankündigung im Blog https://spring.io/blog/2019/09/30/spring-framework-5-2-goes-ga:
Spring Framework 5.2 requires JDK 8 or higher and specifically supports JDK 11 as the current long-term support branch as well as JDK 13 as the latest OpenJDK release. It comes with many performance improvements (affecting startup time as well as peak performance) and further steps taken towards GraalVM native image support.
This release deeply integrates with Kotlin 1.3 and provides first-class support for Kotlin coroutines on top of Spring WebFlux. Furthermore, it comes with reactive messaging integration for the RSocket protocol as well as reactive transaction management for R2DBC, MongoDB and Neo4j (with datastore integration provided by Spring Data’s modules).
As of the upcoming Spring Boot 2.2 RC1 release, you’ll be able to consume Spring Framework 5.2 GA through start.spring.io!
Wichtige Links:
Variablen können mit dem Modifizierer final deklariert werden, sodass genau eine Zuweisung möglich ist. Dieses zusätzliche Schlüsselwort verbietet folglich eine weitere Zuweisung an diese Variable, sodass sie nicht mehr verändert werden kann. Ein üblicher Anwendungsfall sind Konstanten.
int width = 40, height = 12; final int area = width * height; final int perimeter; final var random = Math.random() * 100; perimeter = width * 2 + height * 2; area = 200; // Compilerfehler
perimeter = 100; // Compilerfehler
Im Fall einer versuchten zweiten Zuweisung meldet der Compiler von Eclipse: »The final local variable … cannot be assigned. It must be blank and not using a compound assignment.«; IntelliJ meldet über den Java-Compiler »cannot assign a value to final variable …«.
Java erlaubt bei finalen Werten eine aufgeschobene Initialisierung. Das heißt, dass nicht zwingend zum Zeitpunkt der Variablendeklaration ein Wert zugewiesen werden muss. Das sehen wir im Beispiel an der Variablen perimeter.
Werden Variablen deklariert und initialisiert können final und var zusammen eingesetzt werden; einige Programmiersprachen bieten hier ein eigenes Schlüsselwort, wie val, Java jedoch nicht.
Ausblick
Auch Objektvariablen und Klassenvariablen können final sein. Allerdings müssen die Variablen dann entweder bei der Deklaration belegt werden, oder in einer aufgeschobenen Initialisierung im Konstruktor. Das Schlüsselwort final hat noch zusätzliche Bedeutungen im Zusammenhang mit Vererbung.
… und besonders spannend ist das nicht mehr. Na ja, einige Zusammenfassungen:
Zum Weiterlesen: https://jakarta.ee/release/
Neue Paketnamen gibt es noch nicht: https://jakarta.ee/specifications/platform/8/apidocs/ zeigt noch javax an.
WildFly ist schon Jakarta EE 8 Certified: https://wildfly.org/news/2019/09/12/WildFly_Jakarta_EE_8/
Details unter https://docs.gradle.org/5.6/release-notes.html
Details zu dem Update unter https://www.jetbrains.com/idea/whatsnew/#v2019-2.
Im Wesentlichen nur Root-Zertifkate entfernt: https://jdk.java.net/12/release-notes
Zur Ankündigung siehe https://wildfly.org/news/2019/07/07/WildFly-1701-Released/
Red Hat spricht von harten Bugs, die in diesem Update behoben wurden, zu den Details: https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12313721&version=12342471
Details siehe https://projects.eclipse.org/proposals/jakarta-contexts-and-dependency-injection
Das ist vernünftig, da auch der Rest von Jakarta EE bei der Eclipse Foundation liegt.
Die Switch Expressions kommen in Java 13 mit einer etwas anderen Syntax: https://mail.openjdk.java.net/pipermail/jdk-dev/2019-May/003038.html.
https://openjdk.java.net/jeps/354
So gibt es bei Rückgaben nun yield.
Eine Ganzzahldivision muss nicht unbedingt glatt aufgehen, wie im Fall von 9/2. In diesem Fall gibt es den Rest 1. Diesen Rest liefert der Restwert-Operator (engl. remainder operator), oft auch Modulo genannt.[1] Die Operanden können auch negativ sein.
Beispiel: System.out.println( 9 % 2 ); // 1
Die Division und der Restwert richten sich in Java nach einer einfachen Formel: (int)(a/b) × b + (a%b) = a.
Beispiel: Die Gleichung ist erfüllt, wenn wir etwa a = 10 und b = 3 wählen. Es gilt: (int)(10/3) = 3 und 10 % 3 ergibt 1. Dann ergeben 3 * 3 + 1 = 10.
Aus dieser Gleichung folgt, dass beim Restwert das Ergebnis nur dann negativ ist, wenn der Dividend negativ ist; das Ergebnis ist nur dann positiv, wenn der Dividend positiv ist. Es ist leicht einzusehen, dass das Ergebnis der Restwert-Operation immer echt kleiner ist als der Wert des Divisors. Wir haben den gleichen Fall wie bei der Ganzzahldivision, dass ein Divisor mit dem Wert 0 eine ArithmeticException auslöst und bei Fließkommazahlen zum Ergebnis NaN führt.
System.out.println( „+5% +3 = “ + (+5% +3) ); // 2
System.out.println( „+5 / +3 = “ + (+5 / +3) ); // 1
System.out.println( „+5% -3 = “ + (+5% -3) ); // 2
System.out.println( „+5 / -3 = “ + (+5 / -3) ); // -1
System.out.println( „-5% +3 = “ + (-5% +3) ); // -2
System.out.println( „-5 / +3 = “ + (-5 / +3) ); // -1
System.out.println( „-5% -3 = “ + (-5% -3) ); // -2
System.out.println( „-5 / -3 = “ + (-5 / -3) ); // 1
Gewöhnungsbedürftig ist die Tatsache, dass der erste Operand (Dividend) das Vorzeichen des Restes definiert und niemals der zweite (Divisor).
Hinweis: Um mit value % 2 == 1 zu testen, ob value eine ungerade Zahl ist, muss value positiv sein, denn -3 % 2 wertet Java zu –1 aus. Der Test auf ungerade Zahlen wird erst wieder korrekt mit value % 2 != 0.
Der Restwert-Operator ist auch auf Fließkommazahlen anwendbar, und die Operanden können wiederum negativ sein.
Beispiel: Teste, ob eine double-Zahl doch eine Ganzzahl ist: (d % 1) == 0. Wem das zu verrückst ist, der nutzt alternativ d == Math.rint(d).
Über die oben genannte Formel können wir auch bei Fließkommazahlen das Ergebnis einer Restwert-Operation leicht berechnen. Dabei muss beachtet werden, dass sich der Operator nicht so wie unter IEEE 754 verhält. Denn diese Norm schreibt vor, dass die Restwert-Operation den Rest von einer rundenden Division berechnet und nicht von einer abschneidenden. So wäre das Verhalten nicht analog zum Restwert bei Ganzzahlen. Java definiert den Restwert jedoch bei Fließkommazahlen genauso wie den Restwert bei Ganzzahlen. Wünschen wir ein Restwert-Verhalten, wie IEEE 754 es vorschreibt, so können wir die statische Bibliotheksmethode Math.IEEEremainder(…)[2] verwenden.
Auch bei der Restwert-Operation bei Fließkommazahlen werden wir niemals eine Exception erwarten. Eventuelle Fehler werden, wie im IEEE-Standard beschrieben, mit NaN angegeben. Ein Überlauf oder Unterlauf kann zwar vorkommen, aber nicht geprüft werden.
[1] Mathematiker unterscheiden die beiden Begriffe Rest und Modulo, da ein Modulo nicht negativ ist, der Rest in Java aber schon. Das soll uns aber egal sein.
[2] Es gibt auch Methoden, die nicht mit Kleinbuchstaben beginnen, wobei das sehr selten ist und nur in Sonderfällen auftritt. ieeeRemainder() sah für die Autoren nicht nett aus.
Quelle: https://blogs.eclipse.org/post/wayne-beaton/renaming-java-ee-specifications-jakarta-ee
Das heißt:
Details siehe https://github.com/spring-projects/spring-boot/releases/tag/v2.1.4.RELEASE
Auch Spring Boot 2.2 kommt einen Schritt weiter richtig GA.

Download wie üblich unter https://www.eclipse.org/downloads/