Download unter https://jdk.java.net/12/.
https://jdk.java.net/12/release-notes
Details bei Red Hat unter https://www.redhat.com/en/blog/announcing-general-availability-red-hat-jboss-enterprise-application-platform-72
Stichwörter:
Objekte, dessen Zustände nicht verändert werden können, heißen immutable. Die Klassen deklarieren in so einem Fall keine öffentlichen Variablen und auch keine Methoden mit Seiteneffekten, die diese Zustände modifizieren könnten. Setter gibt es folglich nicht, nur vielleicht Getter.
Damit die Objekte ihre Werte bekommen, gibt es unterschiedliche Wege – parametrisierte Konstruktoren sind ein guter Weg. Die Belegungen lassen sich beim Konstruktoraufruf übergeben und so sehr gut direkt in finale Variablen schreiben. In der Java-Bibliothek gibt es eine Reihe solcher Klassen, die keinen parameterlosen Konstruktor besitzen, und nur einige parametrisierte, die Werte erwarten. Die im Konstruktor übergebenen Werte initialisieren das Objekt, und es behält diese Werte sein ganzes Leben lang. Zu den Klassen gehören zum Beispiel Integer, Double, Color, File oder Font.
Immutable-Objekte, die auch die equals(…)-Methode implementieren heißen Werteobjekt (engl. value object).
Auch wenn sich Objekte mit Setten nicht ändern lassen, so soll es doch möglich sein, neue Objekte mit veränderten Zuständen zu erschaffen. Ein Blick auf die Klasse String zeigt zum Beispiel trim() und toUpperCase() – das Ergebnis sind neue Strings.
Um allgemein Zustandsvariablen zu verändern können Wither-Methoden verwendet werden; sie sind ähnlich wie Setter, nur verändern sie keinen Zustand am aktuellen Objekt, sondern führen zu einem neuen Objekt mit dem geänderten Zustand.
Getter | Setter | Wither |
Typ getXXX() | void setXXX(Typ xxx) | ImmutableTyp withXXX(Typ xxx) |
Namenskonvention der Getter, Setter, Wither für eine Property xxx
Dazu ein Beispiel. Ein Raum hat einen Namen und eine Größe. Die Exemplare sollen unveränderbar sein:
class Room { private final String name; private final int size; public Room( String name, int size ) { this.name = name; this.size = size; } public String getName() { return name; } public int getSize() { return size; } public Room withName( String name ) { return new Room( name, size ); } public Room withSize( int size ) { return new Room( name, size ); } }
Download unter https://projects.eclipse.org/projects/ee4j.glassfish/downloads
Eclipse GlassFish is a complete application server that implements the Jakarta EE specification. GlassFish includes implementations of all required and optional Jakarta EE APIs, and passes all Jakarta EE TCKs. GlassFish also includes a complete administration console, clustering support, and other developer and production focused tools and features.
Details siehe https://junit.org/junit5/docs/5.4.0/release-notes/
NetBeans (http://netbeans.org) bietet komfortable Möglichkeiten zur Java SE- und Java Enterprise-Entwicklung mit Editoren und Wizards für die Erstellung grafischer Oberflächen und Webanwendungen. Die Hauptentwicklung leistete damals Sun Microsystems, doch als Oracle Sun übernahm, hatten Entwicklungsumgebungen keine große Priorität im Datenbankhaus. Es gab zwar Weiterentwicklungen, doch schleppte sich Oracle eher von Version zu Version. Oracle hat letztendlich die Codebasis an die Apache Foundation übergeben und sich damit von der IDE getrennt. Das neue Zuhause ist https://netbeans.apache.org/.
Die aktuelle Version Apache NetBeans 10.0 unterstützt Java 11. Nach dem Download vom https://netbeans.apache.org/download/ bekommen wir eine ZIP-Datei, die wir auspacken. Im bin-Verzeichnis gibt es netbeans64.exe für Windows und eine Shell-Datei für Unix-System. Vor dem Start müssen wir jedoch eine Variable anpassen, die auf das JDK zeigt, andernfalls gibt es den Fehler „cannot find java 1.8 or higher“.
Im etc-Verzeichnis von NetBeans liegt die Datei netbeans.conf, die wir editieren müssen, denn nach der Installation steht auskommentiert:
etc/netbeans.conf, Aussschnitt
#netbeans_jdkhome=“/path/to/jdk“
Das ändern wir und setzen den Pfad (je nach Ort natürlich anders):
netbeans_jdkhome=“C:\Programme\Java\jdk-11″
NetBeans lässt sich starten.
Es öffnet File > New Project…. einen neuen Dialog. Hier lassen sich komplette Java-Projekte mit Beispielcode anlegen. Wählen wir links Java und rechts Java Application und gehen auf Next >.
Es folgt ein neuer Dialog, in dem wir Java SE aktivieren müssen. Machen wir das! Nach ein paar Sekunden kommt ein neuer Dialog, der vorausgefüllt ist. Wir können den Projektnamen, den Speicherort und den Klassennamen und das Paket ändern. Finish generiert das Projekt.
Danach öffnet sich der Editor. Setzen wir den Cursor in die main-Methode. Schreiben wir sout mit einem Tabulator gefolgt, expandiert dies zu System.out.println(„“);.
Das Programm kann gestartet werden a) über die Symbolleiste und dem grünen Play-Button, b) im Menü unter Run, dann Run Project, oder c) über die Taste F6.
Die Startzeiten für Projekte sind etwas schlechter als bei Eclipse, denn NetBeans lässt bei jedem Start ein Ant-Skript laufen, das sich Zeit nimmt.
Details siehe https://spring.io/blog/2019/01/25/spring-tools-4-1-1-released
Zitat:
Highlights from this release include:
Siehe https://marxsoftware.blogspot.com/2018/12/jdk12-dropping-raw-string-literals.html
Und was es für String transform bedeutet: https://marxsoftware.blogspot.com/2018/12/jdk12-string-transform.html
Zusammenfassung aller Neuerungen unter https://www.eclipse.org/eclipseide/2018-12/noteworthy/
Java 11-Unterstützung ist standardmäßig integriert, kein Plugin ist mehr nötig. https://www.eclipse.org/eclipse/news/4.10/jdt.php
Von Visual Studio wurde ein Features auf Eclipse übernommen:
Code Minings support in Java editor | Java editor can now show the number of implementations and references for a Java element as decorative text (Code Minings) above the element.
|
Siehe http://wildfly.org/news/2018/12/13/WildFly15-Final-Released/. Läuft ordentlich auf Java 11. Zur Wiederholung der Versionen:
JBoss 3.2.x. implementiert Java EE-Spezifikation 1.3(.1) (EJB 2.0)
JBoss 4.x: Java EE 1.4 (EJB 2.1, Servlet 2.4, JSF 2.1, …) und am Ende der Serie schon Teile von Java EE 5.
JBoss 5.x: Java EE 5 (EJB 3, JPA 1.0, Servlet 2.5, JSP 1.2)
JBoss 6.x: Java EE 6 (EJB 3.1, CDI 1.0, JPA 2.0, Servlet 3.0, JSF 2.0, JAX-WS 2.2, JAX-RS 1.1, Bean Validation 1.0)
JBoss 7.x: ebenfalls Java EE 6. Implementierung hat modularen Kernel, neue Verzeichnisstruktur.
Wildfly 8.x Java EE 7 zertifiziert für Voll- und Web-Profil. Vierteljährliche Updates.
Wildfly 14.x. Java EE 8 zertifiziert
Wildfly 15. Aktuellste Version, läuft gut auf Java 11
So schreibt es https://github.com/Netflix/Hystrix:
Hystrix is no longer in active development, and is currently in maintenance mode.
Hystrix (at version 1.5.18) is stable enough to meet the needs of Netflix for our existing applications. Meanwhile, our focus has shifted towards more adaptive implementations that react to an application’s real time performance rather than pre-configured settings (for example, through adaptive concurrency limits). For the cases where something like Hystrix makes sense, we intend to continue using Hystrix for existing applications, and to leverage open and active projects like resilience4j for new internal projects. We are beginning to recommend others do the same.
Netflix Hystrix is now officially in maintenance mode, with the following expectations to the greater community: Netflix will no longer actively review issues, merge pull-requests, and release new versions of Hystrix. We have made a final release of Hystrix (1.5.18) per issue 1891 so that the latest version in Maven Central is aligned with the last known stable version used internally at Netflix (1.5.11). If members of the community are interested in taking ownership of Hystrix and moving it back into active mode, please reach out to hystrixoss@googlegroups.com.
Mit wieder eine Tonne von Neuerungen: https://www.jetbrains.com/idea/whatsnew/#v2018-3. Wichtig finde ich Spring Boot 2.1 und interessant ist sicherlich die Java 12 Preview.
So schreibt es das Unternehmen auf dem Blog: https://blog.github.com/2018-11-15-state-of-the-octoverse-top-programming-languages/.
Top programming languages by repositories created, 2008-2018
Top programming languages by contributor as of September 30, 2018
Ein aktuelles Thema, gut präsentiert. Zusammenfassung: Pragmatisch sein, alles nutzen, was die Sprache hergibt. FP/OO hat Vor- und Nachteile.
Das ist in Planung für die kommenden Java-Versionen, Java 13?
7.–11. Januar 2019 (KW 2), 21.–25. Januar 2019 (KW 4), 28. Januar–1. Februar 2019 (KW 5), 18.–22. Februar 2019 (KW 8), 11.–15. März 2019 (KW 11), 25.–29. März 2019 (KW 13), 8.–12. April 2019 (KW 15)
Java für Fortgeschrittene (›JAVA2‹)
26.–30. November 2018 (KW 48), 7.–11. Januar 2019 (KW 2), 21.–25. Januar 2019 (KW 4), 28. Januar–1. Februar 2019 (KW 5), 18.–22. Februar 2019 (KW 8), 11.–15. März 2019 (KW 11), 25.–29. März 2019 (KW 13), 8.–12. April 2019 (KW 15)
3.–5. Dezember 2018 (KW 49), 7.–9. Januar 2019 (KW 2), 21.–23. Januar 2019 (KW 4), 28.–30. Januar 2019 (KW 5), 18.–20. Februar 2019 (KW 8), 11.–13. März 2019 (KW 11), 25.–27. März 2019 (KW 13), 8.–10. April 2019 (KW 15), 24.–26. April 2019 (KW 17)
JavaScript für Web-Entwickler (›JAVASCRIPT‹)
3.–5. Dezember 2018 (KW 49), 7.–11. Januar 2019 (KW 2), 21.–25. Januar 2019 (KW 4), 28. Januar–1. Februar 2019 (KW 5), 18.–22. Februar 2019 (KW 8), 11.–15. März 2019 (KW 11), 25.–29. März 2019 (KW 13), 8.–12. April 2019 (KW 15)
Diamant und var haben vergleichbare Aufgaben, unterscheiden sich aber durch die Quelle der Informationen. Beim Diamanten ist es zum Beispiel bei einer Zuweisung die linke Seite, die dem Compiler die Information gibt, was auf der rechten Seite der Zuweisung für ein Typ gemeint ist. Bei var wiederum ist das anderes herum: die rechte Seite hat den Kontext und daher kann links der Variablentyp entfallen:
List<String> list1 = new ArrayList<>(); // List<String>
var list2 = new ArrayList<String>(); // ArrayList<String>
var list3 = new ArrayList<>(); // ArrayList<Object>
Im letzten Fall gibt es keinen Compilerfehler, nur ist eben nichts bekannt über das Typargument, und daher gilt Object.
Um Code abzukürzen haben wir damit zwei Möglichkeiten: var oder Diamond.