JavaRush /Blogue Java /Random-PT /Pausa para café #149. Como atualizar do Java 8 para o Jav...

Pausa para café #149. Como atualizar do Java 8 para o Java 17. Diferentes maneiras de iterar uma lista em Java

Publicado no grupo Random-PT

Como migrar do Java 8 para o Java 17

Fonte: Médio Usando esta publicação, você pode facilmente atualizar do Java 8 para o Java 17. Pausa para café #149.  Como atualizar do Java 8 para o Java 17. Diferentes maneiras de iterar uma lista em Java - 1 Cada nova versão do Java, especialmente se estivermos falando sobre a versão de suporte de longo prazo (LTS), fornece aos desenvolvedores muitos novos recursos e funções, eliminando erros descobertos anteriormente e melhora o desempenho. Mas até agora, apesar do Java 17 ter sido lançado há quase um ano, a versão mais popular da linguagem ainda é o Java 8. Muitos hesitam em atualizar, acreditando que a nova versão do Java não é totalmente compatível com as versões anteriores, e atualizá-lo exigirá muito esforço. Pessoalmente, acho que é necessário atualizar. Já estou usando Java 17, embora tenha tido alguns problemas com a atualização. Além disso, vale a pena considerar que o Java 8 há muito deixou de ser um serviço gratuito. O desempenho do Java 17 é muito melhor. Por exemplo, ao usar o ZGC, você não precisa mais se preocupar em definir as configurações de coleta de lixo. Se quiser migrar do Java 8 para o Java 17, você terá que fazer algum trabalho extra. Como já fiz esse caminho, posso compartilhar minha experiência na migração para a nova versão.

Atualize a versão do plugin do compilador Maven

Para alguns desenvolvedores, a versão do plugin do compilador Maven pode ser muito antiga. Se você quiser trabalhar com Java 17, a versão do plugin do compilador Maven deve ser pelo menos 3.5.4.
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <versão>3.8.1</versão> <configuração> <fonte>17</fonte> <target>17</target> </configuration> </plugin>

Atualizar dependências

A primeira etapa ao atualizar do Java 8 para o Java 17 é atualizar suas dependências. Como a dependência que você usou originalmente provavelmente não suporta Java 17, você terá que atualizá-la se quiser minimizar o impacto da atualização da versão. Caso contrário, você poderá enfrentar vários problemas. 1. Por exemplo, Lombok causará um erro de compilação. As informações do erro são as seguintes:
Falha ao executar a meta org.apache.maven.plugins:maven-compiler-plugin:3.2:compile (default-compile) no projeto encloud-common: Erro fatal ao compilar: java.lang.ExceptionInInitializerError: Não foi possível tornar o campo privado com.sun .tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs acessível: módulo jdk.compiler não "abre com.sun.tools.javac.processing" para módulo sem nome
Como o Lombok injeta o código gerado em tempo de compilação e usa as classes do pacote com.sun.tools.javac.* , você precisa atualizar o Lombok para a versão mais recente. Isto resolverá o problema. 2. A conexão do zookeeper gerará um erro UnresolvedAddressException , as informações do erro são as seguintes:
org.apache.zookeeper.ClientCnxn - Sessão 0x0 para servidor 10.0.*.*/<unresolved>:2181, erro inesperado, fechando conexão de soquete e tentando reconectar java.nio.channels.UnresolvedAddressException: null em sun.nio.ch. Net .checkAddress(Net.java:149) ~[?:?] em sun.nio.ch.Net.checkAddress(Net.java:157) ~[?:?] em sun.nio.ch.SocketChannelImpl.checkRemote( SocketChannelImpl .java:816) ~[?:?] em sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:839) ~[?:?] em org.apache.zookeeper.ClientCnxnSocketNIO.registerAndConnect(ClientCnxnSocketNIO.java: 277) ~[zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03] em org.apache.zookeeper.ClientCnxnSocketNIO.connect(ClientCnxnSocketNIO.java:287) ~[zookeeper-3.4.13.jar:3 .4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03 ] em org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1021) ~[zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03] em org.apache.zookeeper.ClientCnxn$ SendThread. execute(ClienteCnxn .java:1064) [zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03]
O motivo do erro é que no Java 15 o método toString para InetSocketAddressHolder foi refatorado . Se estiver usando o maven, você pode usar o comando mvnversions:display-dependency-updates para verificar atualizações de dependência. O resultado ficará assim: Pausa para café #149.  Como atualizar do Java 8 para o Java 17. Diferentes maneiras de iterar uma lista em Java - 2

Adicionar uma dependência

Se você compilar com JAXB, receberá um erro. Isso ocorre porque o JAXB foi removido do Java 11. Portanto, você precisa adicionar algumas dependências do 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>
Além disso, o Java 11 também remove os módulos Java EE e CORBA, portanto você terá que adicionar pacotes javax manualmente.
<dependency> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <version>1.3.2</version> </dependency>

Tratamento de InaccessibleObjectException

Se você usar reflexão em seu aplicativo, especialmente setAccessible(true) , provavelmente receberá um erro InaccessibleObjectException quando o aplicativo for iniciado. O erro é causado pelo sistema modular da plataforma Java, que permite o acesso apenas sob determinadas condições:
  1. A aula deve ser pública.
  2. Você deve exportar seus próprios pacotes.
Para resolver esse erro, você pode definir manualmente o módulo como público. Para fazer isso, você precisa adicionar a opção --add-opens à linha de comando de inicialização do Java, conforme mostrado abaixo.
# --add-opens tem a seguinte sintaxe: {modules}/{package}=ALL-UNNAMED java --add-opens java.base/java.lang=ALL-UNNAMED
Ou você pode alterar seu código Java para finalmente resolver esse problema.
module java.base {
    exports java.lang;
}
No geral, depois de resolver todos os problemas acima, seu aplicativo deverá funcionar bem no Java 17. Espero que este artigo ajude você a migrar para o Java 17.

Diferentes maneiras de iterar uma lista em Java

Fonte: Rrtutors Neste artigo, aprenderemos várias maneiras de iterar uma lista em Java. Pausa para café #149.  Como atualizar do Java 8 para o Java 17. Diferentes maneiras de iterar uma lista em Java - 3A estrutura Collection possui uma interface List que nos permite manter uma coleção ordenada de objetos. A interface List é implementada por ArrayList, LinkedList, Stack e Vector. Um número significativo de aplicativos Java usa ArrayList e LinkedList. Existem várias maneiras de iterar em uma lista, cada uma com suas próprias características.

Como iterar uma lista em Java

Você pode usar três maneiras de iterar uma lista em Java:
  • Usando o método For Loop avançado.
  • Usando o método iterador.
  • Iterar sobre os elementos forEach.

1. Usando o método For Loop avançado.

Esta é uma versão do loop for básico que pode ser usada para iterar em uma lista. Aqui está um exemplo:
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+ " ");
        }
            }
}
Conclusão:
100 200 300 400

2. Usando o método iterador.

Você também pode usar iteradores para iterar em uma lista. Os iteradores são especialmente úteis quando você precisa modificar uma lista iterável. Exemplo:
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();
                        }

            }
            }
}
Conclusão:
100 200 300

3. Itere sobre os elementos forEach.

Depois que as funções lambda foram adicionadas ao Java, a sintaxe da linguagem introduziu a função forEach, que permite iterar em qualquer coleção. O exemplo de código a seguir mostra como você pode usar o método forEach para iterar em uma 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);
            }
}
Conclusão:
1 2 3 4
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION