JavaRush /Blog Java /Random-ES /Pausa para el café #149. Cómo actualizar de Java 8 a Java...

Pausa para el café #149. Cómo actualizar de Java 8 a Java 17. Diferentes formas de iterar sobre una lista en Java

Publicado en el grupo Random-ES

Cómo migrar de Java 8 a Java 17

Fuente: Medio Con esta publicación, puede actualizar fácilmente de Java 8 a Java 17. Pausa para el café #149.  Cómo actualizar de Java 8 a Java 17. Diferentes formas de iterar sobre una lista en Java - 1 Cada nueva versión de Java, especialmente si hablamos de la versión de soporte a largo plazo (LTS), proporciona a los desarrolladores muchas características y funciones nuevas, eliminando errores descubiertos previamente y mejora el rendimiento. Pero hasta ahora, a pesar de que Java 17 se lanzó hace casi un año, la versión más popular del lenguaje sigue siendo Java 8. Muchos dudan en actualizar, creyendo que la nueva versión de Java no es totalmente compatible con las versiones anteriores. y actualizarlo requerirá mucho esfuerzo. Personalmente creo que es necesario actualizar. Ya estoy usando Java 17, aunque tuve algunos problemas con la actualización. Además, vale la pena considerar que Java 8 hace tiempo que dejó de ser un servicio gratuito. El rendimiento de Java 17 es mucho mejor. Por ejemplo, al utilizar ZGC, ya no tendrá que preocuparse por configurar los ajustes de recolección de basura. Si desea migrar de Java 8 a Java 17, tendrá que hacer un poco de trabajo adicional. Como ya he seguido este camino, puedo compartir mi experiencia al migrar a la nueva versión.

Actualice la versión del complemento del compilador Maven

Para algunos desarrolladores, la versión del complemento del compilador Maven puede ser demasiado antigua. Si desea trabajar con Java 17, la versión del complemento del compilador Maven debe ser al menos 3.5.4.
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <versión>3.8.1</versión> <configuración> <fuente>17</fuente> <target>17</target> </configuración> </plugin>

Actualizar dependencias

El primer paso al actualizar de Java 8 a Java 17 es actualizar sus dependencias. Dado que la dependencia que utilizó originalmente probablemente no sea compatible con Java 17 en absoluto, deberá actualizarla si desea minimizar el impacto de la actualización de la versión. De lo contrario, puede enfrentarse a una serie de problemas. 1. Por ejemplo, Lombok provocará un error de compilación. La información del error es la siguiente:
No se pudo ejecutar el objetivo org.apache.maven.plugins:maven-compiler-plugin:3.2:compile (compilación predeterminada) en el proyecto encloud-common: error fatal al compilar: java.lang.ExceptionInInitializerError: no se puede hacer que el campo sea privado com.sun .tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs accesibles: el módulo jdk.compiler no "abre com.sun.tools.javac.processing" en un módulo sin nombre
Dado que Lombok inyecta el código generado en tiempo de compilación y utiliza las clases del paquete com.sun.tools.javac.* , es necesario actualizar Lombok a la última versión. Esto solucionará el problema. 2. La conexión del cuidador del zoológico arrojará un error UnresolvedAddressException , la información del error es la siguiente:
org.apache.zookeeper.ClientCnxn - Sesión 0x0 para el servidor 10.0.*.*/<unresolved>:2181, error inesperado, cerrando la conexión del socket e intentando volver a conectar java.nio.channels.UnresolvedAddressException: nulo en sun.nio.ch. Net .checkAddress(Net.java:149) ~[?:?] en sun.nio.ch.Net.checkAddress(Net.java:157) ~[?:?] en sun.nio.ch.SocketChannelImpl.checkRemote( SocketChannelImpl .java:816) ~[?:?] en sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:839) ~[?:?] en org.apache.zookeeper.ClientCnxnSocketNIO.registerAndConnect(ClientCnxnSocketNIO.java: 277 ) ~[zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03] en org.apache.zookeeper.ClientCnxnSocketNIO.connect(ClientCnxnSocketNIO.java:287) ~[zookeeper-3.4.13.jar :3 .4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03 ] en org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1021) ~[zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03] en org.apache.zookeeper.ClientCnxn$ Enviar Thread.run(ClienteCnxn .java:1064) [zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03]
El motivo del error es que en Java 15 se refactorizó el método toString para InetSocketAddressHolder . Si está utilizando maven, puede utilizar el comando mvn versiones:display-dependency-updates para buscar actualizaciones de dependencia. El resultado se verá así: Pausa para el café #149.  Cómo actualizar de Java 8 a Java 17. Diferentes formas de iterar sobre una lista en Java - 2

Agregar una dependencia

Si compila con JAXB, recibirá un error. Esto se debe a que JAXB se eliminó de Java 11. Por lo tanto, debe agregar algunas dependencias de JAXB Maven.
<dependencia> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <versión>2.3.0</versión> </dependencia> <dependencia> <groupId>com.sun.xml .bind</groupId> <artifactId>jaxb-core</artifactId> <versión>2.3.0</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId> jaxb-impl</artifactId> <versión>2.3.0</versión> </dependencia>
Además de esto, Java 11 también elimina los módulos Java EE y CORBA, por lo que tendrá que agregar paquetes javax manualmente.
<dependencia> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <versión>1.3.2</versión> </dependencia>

Manejo de excepciones de objetos inaccesibles

Si utiliza la reflexión en su aplicación, especialmente setAccessible(true) , es probable que reciba un error InaccessibleObjectException cuando se inicie la aplicación. El error se debe al sistema modular de la plataforma Java, que permite el acceso sólo bajo ciertas condiciones:
  1. La clase debe ser pública.
  2. Debes exportar tus propios paquetes.
Para resolver este error, puede configurar manualmente el módulo como público. Para hacer esto, debe agregar la opción --add-opens a la línea de comando de inicio de Java como se muestra a continuación.
# --add-opens tiene la siguiente sintaxis: {modules}/{package}=ALL-UNNAMED java --add-opens java.base/java.lang=ALL-UNNAMED
O puedes cambiar tu código Java para finalmente resolver este problema.
module java.base {
    exports java.lang;
}
En general, después de resolver todos los problemas anteriores, su aplicación debería funcionar bien en Java 17. Espero que este artículo le ayude a migrar a Java 17.

Diferentes formas de iterar sobre una lista en Java

Fuente: Rrtutors En este artículo, aprenderemos varias formas de iterar sobre una lista en Java. Pausa para el café #149.  Cómo actualizar de Java 8 a Java 17. Diferentes formas de iterar sobre una lista en Java - 3El marco Colección tiene una interfaz Lista que nos permite mantener una colección ordenada de objetos. La interfaz List está implementada por ArrayList, LinkedList, Stack y Vector. Un número significativo de aplicaciones Java utilizan ArrayList y LinkedList. Hay varias formas de recorrer una lista, cada una de las cuales tiene sus propias características.

Cómo iterar sobre una lista en Java

Puede utilizar tres formas de iterar una lista en Java:
  • Utilizando el método avanzado For Loop.
  • Usando el método iterador.
  • Iterar sobre elementos para cada uno.

1. Utilizando el método avanzado For Loop.

Esta es una versión del bucle for básico que se puede utilizar para iterar sobre una lista. He aquí un ejemplo:
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+ " ");
        }
            }
}
Conclusión:
100 200 300 400

2. Usando el método iterador.

También puede utilizar iteradores para iterar sobre una lista. Los iteradores son especialmente útiles cuando necesitas modificar una lista iterable. Ejemplo:
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();
                        }

            }
            }
}
Conclusión:
100 200 300

3. Iterar sobre elementos para cada uno.

Después de que se agregaron las funciones lambda a Java, la sintaxis del lenguaje introdujo la función forEach, que le permite iterar sobre cualquier colección. El siguiente ejemplo de código muestra cómo puede utilizar el método forEach para iterar sobre una lista:
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);
            }
}
Conclusión:
1 2 3 4
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION