JavaRush /Java Blog /Random-IT /Pausa caffè #149. Come eseguire l'aggiornamento da Java 8...

Pausa caffè #149. Come eseguire l'aggiornamento da Java 8 a Java 17. Diversi modi per scorrere un elenco in Java

Pubblicato nel gruppo Random-IT

Come migrare da Java 8 a Java 17

Fonte: Medium Utilizzando questa pubblicazione, puoi facilmente aggiornare da Java 8 a Java 17. Pausa caffè #149.  Come eseguire l'aggiornamento da Java 8 a Java 17. Diversi modi per scorrere un elenco in Java - 1 Ogni nuova versione di Java, soprattutto se parliamo della versione con supporto a lungo termine (LTS), fornisce agli sviluppatori molte nuove caratteristiche e funzioni, eliminando errori precedentemente scoperti e migliora le prestazioni. Ma finora, nonostante Java 17 sia stato rilasciato quasi un anno fa, la versione più popolare del linguaggio è ancora Java 8. Molti esitano ad aggiornare, ritenendo che la nuova versione di Java non sia completamente compatibile con le versioni precedenti, e l'aggiornamento richiederà molto impegno. Personalmente penso che sia necessario aggiornarsi. Sto già utilizzando Java 17, anche se ho avuto alcuni problemi con l'aggiornamento. Inoltre, vale la pena considerare che Java 8 ha cessato da tempo di essere un servizio gratuito. Le prestazioni di Java 17 sono molto migliori. Ad esempio, utilizzando ZGC, non devi più preoccuparti di configurare le impostazioni di garbage collection. Se desideri migrare da Java 8 a Java 17, dovrai fare del lavoro extra. Dato che ho già seguito questa strada, posso condividere la mia esperienza nella migrazione alla nuova versione.

Aggiorna la versione del plug-in del compilatore Maven

Per alcuni sviluppatori, la versione del plug-in del compilatore Maven potrebbe essere troppo vecchia. Se vuoi lavorare con Java 17, la versione del plugin del compilatore Maven deve essere almeno 3.5.4.
<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>

Aggiorna le dipendenze

Il primo passaggio durante l'aggiornamento da Java 8 a Java 17 è aggiornare le dipendenze. Poiché la dipendenza utilizzata originariamente probabilmente non supporta affatto Java 17, dovrai aggiornarla se desideri ridurre al minimo l'impatto dell'aggiornamento della versione. Altrimenti potresti dover affrontare una serie di problemi. 1. Ad esempio, Lombok causerà un errore di compilazione. Le informazioni sull'errore sono le seguenti:
Impossibile eseguire l'obiettivo org.apache.maven.plugins:maven-compiler-plugin:3.2:compile (default-compile) sul progetto encloud-common: errore irreversibile durante la compilazione: java.lang.ExceptionInInitializerError: impossibile rendere il campo privato com.sun .tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs accessibile: il modulo jdk.compiler non "apre com.sun.tools.javac.processing" al modulo senza nome
Poiché Lombok inserisce il codice generato in fase di compilazione e utilizza le classi del pacchetto com.sun.tools.javac.* , è necessario aggiornare Lombok alla versione più recente. Questo risolverà il problema. 2. La connessione zookeeper genererà un errore UnresolvedAddressException , le informazioni sull'errore sono le seguenti:
org.apache.zookeeper.ClientCnxn - Sessione 0x0 per il server 10.0.*.*/<unresolved>:2181, errore imprevisto, chiusura della connessione socket e tentativo di riconnessione java.nio.channels.UnresolvedAddressException: null su sun.nio.ch. Net .checkAddress(Net.java:149) ~[?:?] at sun.nio.ch.Net.checkAddress(Net.java:157) ~[?:?] at sun.nio.ch.SocketChannelImpl.checkRemote( SocketChannelImpl .java:816) ~[?:?] su sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:839) ~[?:?] su org.apache.zookeeper.ClientCnxnSocketNIO.registerAndConnect(ClientCnxnSocketNIO.java: 277 ) ~[zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03] su org.apache.zookeeper.ClientCnxnSocketNIO.connect(ClientCnxnSocketNIO.java:287) ~[zookeeper-3.4.13 .jar:3 .4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03 ] su org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1021) ~[zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03] su org.apache.zookeeper.ClientCnxn $ SendThread.run(ClientCnxn .java:1064) [zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03]
Il motivo dell'errore è che in Java 15 è stato effettuato il refactoring del metodo toString per InetSocketAddressHolder . Se stai utilizzando Maven, puoi utilizzare il comando mvnversions:display-dependency-updates per verificare la presenza di aggiornamenti delle dipendenze. Il risultato sarà simile a questo: Pausa caffè #149.  Come eseguire l'aggiornamento da Java 8 a Java 17. Diversi modi per scorrere un elenco in Java - 2

Aggiungi una dipendenza

Se compili con JAXB, riceverai un errore. Questo perché JAXB è stato rimosso da Java 11. Quindi è necessario aggiungere alcune dipendenze JAXB Maven.
<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>
Oltre a questo, Java 11 rimuove anche i moduli Java EE e CORBA, quindi dovrai aggiungere manualmente i pacchetti javax.
<dependency> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <version>1.3.2</version> </dependency>

Gestione dell'eccezione InaccessibleObjectException

Se utilizzi la riflessione nella tua applicazione, in particolare setAccessible(true) , probabilmente riceverai un errore InaccessibleObjectException all'avvio dell'applicazione. L'errore è causato dal sistema modulare della piattaforma Java, che consente l'accesso solo a determinate condizioni:
  1. La classe deve essere pubblica.
  2. È necessario esportare i propri pacchetti.
Per risolvere questo errore, puoi impostare manualmente il modulo su pubblico. Per fare ciò, è necessario aggiungere l' opzione --add-opens alla riga di comando di avvio di Java come mostrato di seguito.
# --add-opens ha la seguente sintassi: {modules}/{package}=ALL-UNNAMED java --add-opens java.base/java.lang=ALL-UNNAMED
Oppure puoi modificare il tuo codice Java per risolvere finalmente questo problema.
module java.base {
    exports java.lang;
}
Nel complesso, dopo aver risolto tutti i problemi di cui sopra, la tua applicazione dovrebbe funzionare correttamente su Java 17. Spero che questo articolo ti aiuti a migrare a Java 17.

Diversi modi per scorrere un elenco in Java

Fonte: Rrtutors In questo articolo impareremo diversi modi per scorrere un elenco in Java. Pausa caffè #149.  Come eseguire l'aggiornamento da Java 8 a Java 17. Diversi modi per scorrere un elenco in Java - 3Il framework Collection ha un'interfaccia List che ci consente di mantenere una raccolta ordinata di oggetti. L'interfaccia List è implementata da ArrayList, LinkedList, Stack e Vector. Un numero significativo di applicazioni Java utilizza ArrayList e LinkedList. Esistono diversi modi per scorrere un elenco, ognuno dei quali ha le proprie caratteristiche.

Come scorrere un elenco in Java

Puoi utilizzare tre modi per ripetere un elenco in Java:
  • Utilizzando il metodo avanzato For Loop.
  • Utilizzando il metodo iteratore.
  • Itera sugli elementi forEach.

1. Utilizzando il metodo avanzato For Loop.

Questa è una versione del ciclo for di base che può essere utilizzata per scorrere un elenco. Ecco un esempio:
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+ " ");
        }
            }
}
Conclusione:
100 200 300 400

2. Utilizzando il metodo iteratore.

Puoi anche utilizzare gli iteratori per scorrere un elenco. Gli iteratori sono particolarmente utili quando è necessario modificare un elenco iterabile. Esempio:
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();
                        }

            }
            }
}
Conclusione:
100 200 300

3. Iterare sugli elementi forEach.

Dopo che le funzioni lambda sono state aggiunte a Java, la sintassi del linguaggio ha introdotto la funzione forEach, che consente di eseguire un'iterazione su qualsiasi raccolta. L'esempio di codice seguente mostra come utilizzare il metodo forEach per scorrere un elenco:
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);
            }
}
Conclusione:
1 2 3 4
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION