JavaRush /Java-Blog /Random-DE /Kaffeepause Nr. 149. So aktualisieren Sie von Java 8 auf ...

Kaffeepause Nr. 149. So aktualisieren Sie von Java 8 auf Java 17. Verschiedene Möglichkeiten zum Durchlaufen einer Liste in Java

Veröffentlicht in der Gruppe Random-DE

So migrieren Sie von Java 8 auf Java 17

Quelle: Mittel Mithilfe dieser Veröffentlichung können Sie problemlos ein Upgrade von Java 8 auf Java 17 durchführen. Kaffeepause Nr. 149.  So aktualisieren Sie von Java 8 auf Java 17. Verschiedene Möglichkeiten zum Durchlaufen einer Liste in Java – 1 Jede neue Version von Java, insbesondere wenn es sich um die LTS-Version (Long Term Support) handelt, bietet Entwicklern viele neue Features und Funktionen, die entfallen zuvor entdeckte Fehler und verbessert die Leistung. Doch trotz der Tatsache, dass Java 17 vor fast einem Jahr veröffentlicht wurde, ist Java 8 immer noch die beliebteste Version der Sprache. Viele zögern mit einem Upgrade, da sie glauben, dass die neue Version von Java nicht vollständig mit früheren Versionen kompatibel ist. und ein Upgrade darauf wird viel Aufwand erfordern. Ich persönlich halte ein Upgrade für notwendig. Ich verwende bereits Java 17, obwohl ich beim Upgrade einige Probleme hatte. Darüber hinaus ist zu bedenken, dass Java 8 schon lange kein kostenloser Dienst mehr ist. Die Leistung von Java 17 ist viel besser. Durch die Verwendung von ZGC müssen Sie sich beispielsweise nicht mehr um die Konfiguration der Garbage-Collection-Einstellungen kümmern. Wenn Sie von Java 8 auf Java 17 migrieren möchten, müssen Sie einige zusätzliche Arbeiten ausführen. Da ich diesen Weg bereits gegangen bin, kann ich meine Erfahrungen bei der Migration auf die neue Version weitergeben.

Aktualisieren Sie die Version des Maven-Compiler-Plugins

Für einige Entwickler ist die Version des Maven-Compiler-Plugins möglicherweise zu alt. Wenn Sie mit Java 17 arbeiten möchten, muss die Maven-Compiler-Plugin-Version mindestens 3.5.4 sein.
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>17</source> <target>17</target> </configuration> </plugin>

Abhängigkeiten aktualisieren

Der erste Schritt beim Upgrade von Java 8 auf Java 17 besteht darin, Ihre Abhängigkeiten zu aktualisieren. Da die ursprünglich von Ihnen verwendete Abhängigkeit Java 17 wahrscheinlich überhaupt nicht unterstützt, müssen Sie sie aktualisieren, wenn Sie die Auswirkungen des Versions-Upgrades minimieren möchten. Andernfalls kann es zu einer Reihe von Problemen kommen. 1. Lombok verursacht beispielsweise einen Kompilierungsfehler. Die Fehlerinformationen lauten wie folgt:
Ziel org.apache.maven.plugins:maven-compiler-plugin:3.2:compile (default-compile) konnte im Projekt encloud-common nicht ausgeführt werden: Schwerwiegender Fehler beim Kompilieren: java.lang.ExceptionInInitializerError: Das Feld „com.sun“ konnte nicht privat gemacht werden .tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs zugänglich: Modul jdk.compiler „öffnet com.sun.tools.javac.processing“ nicht für unbenannte Module
Da Lombok den generierten Code zur Kompilierungszeit einfügt und die Klassen aus dem Paket com.sun.tools.javac.* verwendet , müssen Sie Lombok auf die neueste Version aktualisieren. Dies wird das Problem lösen. 2. Die Zookeeper-Verbindung löst einen UnresolvedAddressException- Fehler aus . Die Fehlerinformationen lauten wie folgt:
org.apache.zookeeper.ClientCnxn – Sitzung 0x0 für Server 10.0.*.*/<unresolved>:2181, unerwarteter Fehler, Schließen der Socket-Verbindung und Versuch, die Verbindung wiederherzustellen java.nio.channels.UnresolvedAddressException: null bei sun.nio.ch. Net .checkAddress(Net.java:149) ~[?:?] bei sun.nio.ch.Net.checkAddress(Net.java:157) ~[?:?] bei sun.nio.ch.SocketChannelImpl.checkRemote( SocketChannelImpl .java:816) ~[?:?] bei sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:839) ~[?:?] bei org.apache.zookeeper.ClientCnxnSocketNIO.registerAndConnect(ClientCnxnSocketNIO.java: 277). :3 .4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03 ] bei org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1021) ~[zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03] bei org.apache.zookeeper.ClientCnxn$ SendThread. run(ClientCnxn . java:1064) [zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03]
Der Grund für den Fehler liegt darin, dass in Java 15 die toString- Methode für InetSocketAddressHolder umgestaltet wurde . Wenn Sie Maven verwenden, können Sie den Befehl mvnversions:display-dependency-updates verwenden , um nach Abhängigkeitsaktualisierungen zu suchen. Das Ergebnis wird so aussehen: Kaffeepause Nr. 149.  So aktualisieren Sie von Java 8 auf Java 17. Verschiedene Möglichkeiten zum Durchlaufen einer Liste in Java – 2

Fügen Sie eine Abhängigkeit hinzu

Wenn Sie mit JAXB kompilieren, erhalten Sie eine Fehlermeldung. Dies liegt daran, dass JAXB aus Java 11 entfernt wurde. Sie müssen also einige JAXB-Maven-Abhängigkeiten hinzufügen.
<dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>com.sun.xml .bind</groupId> <artifactId>jaxb-core</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId> jaxb-impl</artifactId> <version>2.3.0</version> </dependency>
Darüber hinaus entfernt Java 11 auch Java EE- und CORBA-Module, sodass Sie Javax-Pakete manuell hinzufügen müssen.
<dependency> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <version>1.3.2</version> </dependency>

Behandlung von InaccessibleObjectException

Wenn Sie in Ihrer Anwendung Reflection verwenden, insbesondere setAccessible(true) , erhalten Sie beim Start der Anwendung wahrscheinlich einen InaccessibleObjectException- Fehler. Der Fehler wird durch das modulare System der Java-Plattform verursacht, das den Zugriff nur unter bestimmten Bedingungen zulässt:
  1. Die Klasse muss öffentlich sein.
  2. Sie müssen Ihre eigenen Pakete exportieren.
Um diesen Fehler zu beheben, können Sie das Modul manuell auf öffentlich setzen. Dazu müssen Sie die Option --add-opens zur Java-Startbefehlszeile hinzufügen, wie unten gezeigt.
# --add-opens hat die folgende Syntax: {modules}/{package}=ALL-UNNAMED java --add-opens java.base/java.lang=ALL-UNNAMED
Oder Sie können Ihren Java-Code ändern, um dieses Problem endgültig zu lösen.

module java.base {
    exports java.lang;
}
Insgesamt sollte Ihre Anwendung nach der Lösung aller oben genannten Probleme unter Java 17 einwandfrei laufen. Ich hoffe, dieser Artikel wird Ihnen bei der Migration auf Java 17 helfen.

Verschiedene Möglichkeiten zum Durchlaufen einer Liste in Java

Quelle: Rrtutors In diesem Artikel lernen wir verschiedene Möglichkeiten zum Durchlaufen einer Liste in Java kennen. Kaffeepause Nr. 149.  So aktualisieren Sie von Java 8 auf Java 17. Verschiedene Möglichkeiten zum Durchlaufen einer Liste in Java - 3Das Collection-Framework verfügt über eine List-Schnittstelle, die es uns ermöglicht, eine geordnete Sammlung von Objekten zu verwalten. Die List-Schnittstelle wird durch ArrayList, LinkedList, Stack und Vector implementiert. Eine beträchtliche Anzahl von Java-Anwendungen verwenden ArrayList und LinkedList. Es gibt mehrere Möglichkeiten, eine Liste zu durchlaufen, von denen jede ihre eigenen Eigenschaften hat.

So iterieren Sie über eine Liste in Java

Sie können eine Liste in Java auf drei Arten iterieren:
  • Verwendung der erweiterten For-Schleifenmethode.
  • Verwendung der Iterator-Methode.
  • Iterieren Sie über Elemente von forEach.

1. Verwendung der erweiterten For-Schleifenmethode.

Dies ist eine Version der grundlegenden for- Schleife , die zum Durchlaufen einer Liste verwendet werden kann. Hier ist ein Beispiel:

import java.util.ArrayList;
import java.util.List;
public class Enhanced_for_loop {
            public static void main(String[] args) {
        List<Integer> figurez = new ArrayList<>();
        figurez.add(100);
        figurez.add(200);
        figurez.add(300);
        figurez.add(400);
        for(int i: figurez) {
            System.out.print(i+ " ");
        }
            }
}
Abschluss:
100 200 300 400

2. Verwendung der Iterator-Methode.

Sie können auch Iteratoren verwenden, um eine Liste zu durchlaufen. Iteratoren sind besonders nützlich, wenn Sie eine iterierbare Liste ändern müssen. Beispiel:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Iterate_List_using_Iterators {
            public static void main(String[] args) {
                        List<Integer> numbari = new ArrayList<>();
                        numbari.add(100);
                        numbari.add(200);
                        numbari.add(300);
                    Iterator<Integer> itr = numbari.iterator();
                    while(itr.hasNext()) {
                        int i = itr.next();
                        System.out.print(i+ " ");
                        if(i==3) {
                            itr.remove();
                        }
 
            }
            }
}
Abschluss:
100 200 300

3. Iterieren Sie über die Elemente von forEach.

Nachdem Lambda-Funktionen zu Java hinzugefügt wurden, wurde in der Sprachsyntax die Funktion forEach eingeführt, mit der Sie jede Sammlung durchlaufen können. Das folgende Codebeispiel zeigt, wie Sie mit der forEach-Methode eine Liste durchlaufen können:

import java.util.ArrayList;
import java.util.List;
public class Iterate_List_using_ForeEach_iterable {
            public static void main(String[] args) {
                        List<Integer> numbari = new ArrayList<>();
                        numbari.add(1);
                        numbari.add(2);
                        numbari.add(3);
                        numbari.add(4);
                        numbari.forEach(System.out::println);
            }
}
Abschluss:
1 2 3 4
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION