JavaRush /Blog Jawa /Random-JV /Ngopi #149. Carane nganyarke saka Jawa 8 kanggo Jawa 17. ...

Ngopi #149. Carane nganyarke saka Jawa 8 kanggo Jawa 17. Beda cara kanggo iterate liwat dhaftar ing Jawa

Diterbitake ing grup

Carane migrasi saka Jawa 8 menyang Jawa 17

Sumber: Sedheng Nggunakake publikasi iki, sampeyan bisa kanthi gampang nganyarke saka Jawa 8 menyang Jawa 17. Ngopi #149.  Carane nganyarke saka Jawa 8 menyang Jawa 17. Cara sing beda-beda kanggo ngowahi dhaptar ing Jawa - 1 Saben rilis anyar Jawa, utamané yen kita ngomong babagan versi dhukungan jangka panjang (LTS), nyedhiyakake pangembang kanthi akeh fitur lan fungsi anyar, ngilangi kesalahan sing ditemokake sadurunge lan nambah kinerja. Nanging nganti saiki, senadyan kasunyatane yen Java 17 dirilis meh setahun kepungkur, versi basa sing paling populer isih Jawa 8. Akeh sing ragu-ragu kanggo nganyarke, percaya yen versi anyar Jawa ora kompatibel karo versi sadurunge. lan nganyarke kanggo iku mbutuhake akèh gaweyan. Secara pribadi, aku mikir yen perlu upgrade. Aku wis nggunakake Java 17, sanajan aku duwe sawetara masalah karo upgrade. Kajaba iku, kudu dipikirake manawa Java 8 wis suwe ora dadi layanan gratis. Java 17 kinerja luwih apik. Contone, nggunakake ZGC, sampeyan ora maneh kudu padha sumelang ing bab konfigurasi setelan koleksi uwuh. Yen sampeyan pengin pindhah saka Jawa 8 menyang Jawa 17, sampeyan kudu nindakake sawetara karya ekstra. Amarga aku wis ngliwati rute iki, aku bisa nuduhake pengalaman migrasi menyang versi anyar.

Nganyari versi plugin Maven compiler

Kanggo sawetara pangembang, versi plugin kompiler Maven bisa uga wis lawas banget. Yen sampeyan pengin nggarap Java 17, versi plugin Maven compiler kudu paling sethithik 3.5.4.
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <konfigurasi> <sumber>17</source> <target>17</target> </configuration> </plugin>

Nganyari dependensi

Langkah pisanan nalika nganyarke saka Java 8 menyang Java 17 yaiku nganyari dependensi sampeyan. Amarga ketergantungan sing sampeyan gunakake bisa uga ora ndhukung Java 17, sampeyan kudu nganyari yen sampeyan pengin nyuda pengaruh upgrade versi. Yen ora, sampeyan bisa ngadhepi sawetara masalah. 1. Contone, Lombok bakal nyebabake kesalahan kompilasi. Informasi kesalahan kaya ing ngisor iki:
Gagal nglakokake goal org.apache.maven.plugins:maven-compiler-plugin:3.2:compile (default-compile) ing project encloud-common: Fatal error compiling: java.lang.ExceptionInInitializerError: Ora bisa nggawe lapangan pribadi com.sun .tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs diakses: modul jdk.compiler ora "mbukak com.sun.tools.javac.processing" kanggo unnamed
Wiwit Lombok nyuntikake kode sing digawe ing wektu kompilasi lan nggunakake kelas saka paket com.sun.tools.javac.* , sampeyan kudu nganyari Lombok menyang versi paling anyar. Iki bakal ngatasi masalah. 2. Sambungan zookeeper bakal mbuwang kesalahan UnresolvedAddressException , informasi kesalahan kaya ing ngisor iki:
org.apache.zookeeper.ClientCnxn - Sesi 0x0 kanggo server 10.0.*.*/<unresolved>:2181, kesalahan sing ora dikarepke, nutup sambungan soket lan nyoba kanggo nyambung maneh java.nio.channels.UnresolvedAddressException: null ing sun.nio.ch. Net .checkAddress(Net.java:149) ~[?:?] ing sun.nio.ch.Net.checkAddress(Net.java:157) ~[?:?] ing sun.nio.ch.SocketChannelImpl.checkRemote( SocketChannelImpl .java:816) ~[?:?] ing sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:839) ~[?:?] ing org.apache.zookeeper.ClientCnxnSocketNIO.registerAndConnect(ClientCnxnSocketNIO.java: 277 ) ~[zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03] ing org.apache.zookeeper.ClientCnxnSocketNIO.connect(ClientCnxnSocketNIO3. .4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03 ] ing org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1021) ~[zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a74308b15a309b15a309b15a309b15a308b15a309b15a309b15a309b15a309b15a309b15a309b15a309b15a7. Thread.run(ClientCnxn .java:1064) [zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03]
Alesan kanggo kesalahan iku ing Jawa 15 cara toString kanggo InetSocketAddressHolder wis refactored . Yen sampeyan nggunakake maven, sampeyan bisa nggunakake mvn versions: display-dependency-updates printah kanggo mriksa nganyari dependensi. Asil bakal katon kaya iki: Ngopi #149.  Carane nganyarke saka Jawa 8 menyang Jawa 17. Cara sing beda-beda kanggo ngowahi dhaptar ing Jawa - 2

Tambah ketergantungan

Yen sampeyan ngumpulake karo JAXB, sampeyan bakal nampa kesalahan. Iki amarga JAXB wis dibusak saka Jawa 11. Dadi sampeyan kudu nambah sawetara dependensi 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>
Kajaba iku, Java 11 uga mbusak modul Java EE lan CORBA, dadi sampeyan kudu nambah paket javax kanthi manual.
<dependency> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <version>1.3.2</version> </dependency>

Nangani InaccessibleObjectException

Yen sampeyan nggunakake refleksi ing aplikasi sampeyan, utamane setAccessible(true) , sampeyan bakal nampa kesalahan InaccessibleObjectException nalika aplikasi diwiwiti. Kesalahan kasebut disebabake dening sistem modular platform Java, sing ngidini akses mung ing kahanan tartamtu:
  1. Kelas kudu umum.
  2. Sampeyan kudu ngekspor paket sampeyan dhewe.
Kanggo ngatasi kesalahan iki, sampeyan bisa kanthi manual nyetel modul kanggo umum. Kanggo nindakake iki, sampeyan kudu nambah opsi --add-opens menyang baris printah wiwitan Jawa minangka kapacak ing ngisor iki.
# --add-opens nduweni sintaks ing ngisor iki: {modules}/{package}=ALL-UNNAMED java --add-opens java.base/java.lang=ALL-UNNAMED
Utawa sampeyan bisa ngganti kode Java kanggo ngrampungake masalah iki.
module java.base {
    exports java.lang;
}
Sakabèhé, sawise ngrampungake kabeh masalah ing ndhuwur, aplikasi sampeyan kudu mlaku kanthi apik ing Java 17. Muga-muga artikel iki bisa mbantu sampeyan pindhah menyang Java 17.

Cara sing beda kanggo ngulang dhaptar ing Jawa

Sumber: Rrtutors Ing artikel iki, kita bakal sinau sawetara cara kanggo ngowahi dhaptar ing Jawa. Ngopi #149.  Carane nganyarke saka Jawa 8 menyang Jawa 17. Cara sing beda-beda kanggo ngowahi dhaptar ing Jawa - 3Framework Koleksi wis antarmuka Dhaftar sing ngijini kita kanggo njaga koleksi dhawuh obyek. Antarmuka List diimplementasikake dening ArrayList, LinkedList, Stack, lan Vector. Sawetara aplikasi Java nggunakake ArrayList lan LinkedList. Ana sawetara cara kanggo ngulang dhaptar, sing saben duwe ciri dhewe.

Kepiye cara ngulang dhaptar ing Jawa

Sampeyan bisa nggunakake telung cara kanggo ngowahi dhaptar ing Jawa:
  • Nggunakake metode For Loop lanjutan.
  • Nggunakake metode iterator.
  • Iterate liwat unsur kanggo Saben.

1. Nggunakake majeng Kanggo cara Loop.

Iki minangka versi dhasar kanggo daur ulang sing bisa digunakake kanggo ngulang dhaptar. Iki contone:
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+ " ");
        }
            }
}
Kesimpulan:
100 200 300 400

2. Nggunakake metode iterator.

Sampeyan uga bisa nggunakake iterator kanggo ngulang dhaptar. Iterator utamané migunani nalika sampeyan kudu ngowahi dhaptar iterable. Tuladha:
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();
                        }

            }
            }
}
Kesimpulan:
100 200 300

3. Iterate liwat unsur forEach.

Sawise fungsi lambda ditambahake ing Jawa, sintaks basa ngenalake fungsi forEach, sing ngidini sampeyan ngulang koleksi apa wae. Conto kode ing ngisor iki nuduhake carane sampeyan bisa nggunakake metode forEach kanggo ngulang dhaptar:
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);
            }
}
Kesimpulan:
1 2 3 4
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION