JavaRush /Blog Java /Random-MS /Coffee break #149. Cara menaik taraf daripada Java 8 kepa...

Coffee break #149. Cara menaik taraf daripada Java 8 kepada Java 17. Cara yang berbeza untuk mengulang senarai dalam Java

Diterbitkan dalam kumpulan

Bagaimana untuk berhijrah dari Java 8 ke Java 17

Sumber: Sederhana Menggunakan penerbitan ini, anda boleh menaik taraf dengan mudah daripada Java 8 kepada Java 17. Coffee break #149.  Bagaimana untuk menaik taraf daripada Java 8 kepada Java 17. Cara yang berbeza untuk mengulang senarai dalam Java - 1 Setiap keluaran baharu Java, terutamanya jika kita bercakap tentang versi sokongan jangka panjang (LTS), menyediakan pembangun dengan banyak ciri dan fungsi baharu, menghapuskan ralat yang ditemui sebelum ini dan meningkatkan prestasi. Tetapi setakat ini, walaupun Java 17 dikeluarkan hampir setahun yang lalu, versi bahasa yang paling popular masih Java 8. Ramai yang teragak-agak untuk menaik taraf, mempercayai bahawa versi baharu Java tidak serasi sepenuhnya dengan versi sebelumnya, dan menaik taraf kepadanya akan memerlukan banyak usaha. Secara peribadi, saya rasa perlu untuk menaik taraf. Saya sudah menggunakan Java 17, walaupun saya mempunyai beberapa masalah dengan peningkatan. Di samping itu, perlu dipertimbangkan bahawa Java 8 telah lama tidak lagi menjadi perkhidmatan percuma. Prestasi Java 17 jauh lebih baik. Contohnya, dengan menggunakan ZGC, anda tidak perlu risau lagi tentang mengkonfigurasi tetapan kutipan sampah. Jika anda ingin berhijrah dari Java 8 ke Java 17, anda perlu melakukan beberapa kerja tambahan. Memandangkan saya telah pun melalui laluan ini, saya boleh berkongsi pengalaman saya dalam berhijrah ke versi baharu.

Kemas kini versi pemalam pengkompil Maven

Bagi sesetengah pembangun, versi pemalam pengkompil Maven mungkin terlalu lama. Jika anda ingin bekerja dengan Java 17, versi pemalam pengkompil Maven mestilah sekurang-kurangnya 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>

Kemas kini kebergantungan

Langkah pertama apabila menaik taraf daripada Java 8 ke Java 17 adalah untuk mengemas kini kebergantungan anda. Memandangkan pergantungan yang anda gunakan pada asalnya mungkin tidak menyokong Java 17 sama sekali, anda perlu mengemas kininya jika anda ingin meminimumkan kesan peningkatan versi. Jika tidak, anda mungkin menghadapi beberapa masalah. 1. Sebagai contoh, Lombok akan menyebabkan ralat kompilasi. Maklumat ralat adalah seperti berikut:
Gagal melaksanakan matlamat org.apache.maven.plugins:maven-compiler-plugin:3.2:compile (default-compile) pada projek encloud-common: Ralat maut menyusun: java.lang.ExceptionInInitializerError: Tidak dapat menjadikan medan peribadi com.sun .tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs boleh diakses: modul jdk.compiler tidak "membuka com.sun.tools.javac.processing" kepada unnamakan modul
Memandangkan Lombok menyuntik kod yang dijana pada masa penyusunan dan menggunakan kelas daripada pakej com.sun.tools.javac.* , anda perlu mengemas kini Lombok kepada versi terkini. Ini akan menyelesaikan masalah. 2. Sambungan penjaga zoo akan membuang ralat UnresolvedAddressException , maklumat ralat adalah seperti berikut:
org.apache.zookeeper.ClientCnxn - Sesi 0x0 untuk pelayan 10.0.*.*/<unresolved>:2181, ralat tidak dijangka, menutup sambungan soket dan cuba menyambung semula java.nio.channels.UnresolvedAddressException: null at sun.nio.ch. Net .checkAddress(Net.java:149) ~[?:?] di sun.nio.ch.Net.checkAddress(Net.java:157) ~[?:?] di sun.nio.ch.SocketChannelImpl.checkRemote( SocketChannelImpl .java:816) ~[?:?] di sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:839) ~[?:?] di org.apache.zookeeper.ClientCnxnSocketNIO.registerAndConnect(ClientCnxnSocketNIO.java: 277 ) ~[zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03] di org.apache.zookeeper.ClientCnxnSocketNIO.connect(ClientCnxnSocketNIO. .4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03 ] di org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1021) ~[zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a309b15a3chee. Thread.run(ClientCnxn java:1064) [zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03]
Sebab ralat ialah dalam Java 15 kaedah toString untuk InetSocketAddressHolder telah difaktorkan semula . Jika anda menggunakan maven, anda boleh menggunakan perintah mvn versions:display-dependency-updates untuk menyemak kemas kini pergantungan. Hasilnya akan kelihatan seperti ini: Coffee break #149.  Bagaimana untuk menaik taraf daripada Java 8 kepada Java 17. Cara yang berbeza untuk mengulang senarai dalam Java - 2

Tambahkan kebergantungan

Jika anda menyusun dengan JAXB, anda akan menerima ralat. Ini kerana JAXB telah dialih keluar daripada Java 11. Jadi anda perlu menambah beberapa kebergantungan 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>
Di samping itu, Java 11 juga mengalih keluar modul Java EE dan CORBA, jadi anda perlu menambah pakej javax secara manual.
<dependency> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <version>1.3.2</version> </dependency>

Mengendalikan InaccessibleObjectException

Jika anda menggunakan refleksi dalam aplikasi anda, terutamanya setAccessible(true) , maka anda mungkin akan menerima ralat InaccessibleObjectException apabila aplikasi bermula. Ralat disebabkan oleh sistem modular platform Java, yang membenarkan akses hanya dalam keadaan tertentu:
  1. Kelas mestilah awam.
  2. Anda mesti mengeksport pakej anda sendiri.
Untuk menyelesaikan ralat ini, anda boleh menetapkan modul kepada awam secara manual. Untuk melakukan ini, anda perlu menambah pilihan --add-opens pada baris arahan permulaan Java seperti yang ditunjukkan di bawah.
# --add-opens mempunyai sintaks berikut: {modules}/{package}=ALL-UNNAMED java --add-opens java.base/java.lang=ALL-UNNAMED
Atau anda boleh menukar kod Java anda untuk menyelesaikan masalah ini.
module java.base {
    exports java.lang;
}
Secara keseluruhan, selepas menyelesaikan semua isu di atas, aplikasi anda sepatutnya berjalan dengan baik pada Java 17. Saya harap artikel ini akan membantu anda berhijrah ke Java 17.

Cara yang berbeza untuk mengulang senarai dalam Java

Sumber: Rrtutors Dalam artikel ini, kita akan mempelajari beberapa cara untuk mengulang senarai dalam Java. Coffee break #149.  Bagaimana untuk menaik taraf daripada Java 8 kepada Java 17. Cara berbeza untuk mengulang senarai dalam Java - 3Rangka kerja Koleksi mempunyai antara muka Senarai yang membolehkan kami mengekalkan koleksi objek yang tersusun. Antara muka Senarai dilaksanakan oleh ArrayList, LinkedList, Stack dan Vector. Sebilangan besar aplikasi Java menggunakan ArrayList dan LinkedList. Terdapat beberapa cara untuk lelaran melalui senarai, setiap satunya mempunyai ciri tersendiri.

Bagaimana untuk mengulangi senarai dalam Java

Anda boleh menggunakan tiga cara untuk mengulang senarai dalam Java:
  • Menggunakan kaedah For Loop lanjutan.
  • Menggunakan kaedah iterator.
  • Lelaran ke atas elemen untukSetiap.

1. Menggunakan kaedah For Loop lanjutan.

Ini ialah versi asas untuk gelung yang boleh digunakan untuk mengulang senarai. Berikut ialah contoh:
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. Menggunakan kaedah iterator.

Anda juga boleh menggunakan iterator untuk mengulang senarai. Iterator amat berguna apabila anda perlu mengubah suai senarai boleh lelaran. Contoh:
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. Lelaran ke atas elemen untukSetiap.

Selepas fungsi lambda ditambahkan pada Java, sintaks bahasa memperkenalkan fungsi forEach, yang membolehkan anda mengulangi sebarang koleksi. Contoh kod berikut menunjukkan cara anda boleh menggunakan kaedah forEach untuk mengulang senarai:
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
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION