JavaRush /Java Blog /Random-ID /Rehat kopi #149. Cara memutakhirkan dari Java 8 ke Java 1...

Rehat kopi #149. Cara memutakhirkan dari Java 8 ke Java 17. Berbagai cara untuk mengulangi daftar di Java

Dipublikasikan di grup Random-ID

Cara migrasi dari Java 8 ke Java 17

Sumber: Medium Dengan menggunakan publikasi ini, Anda dapat dengan mudah memutakhirkan dari Java 8 ke Java 17. Rehat kopi #149.  Cara memutakhirkan dari Java 8 ke Java 17. Berbagai cara untuk mengulangi daftar di Java - 1 Setiap rilis baru Java, terutama jika kita berbicara tentang versi dukungan jangka panjang (LTS), memberi pengembang banyak fitur dan fungsi baru, menghilangkan kesalahan yang ditemukan sebelumnya dan meningkatkan kinerja. Namun sejauh ini, meskipun Java 17 telah dirilis hampir setahun yang lalu, versi bahasa yang paling populer masih Java 8. Banyak yang ragu untuk melakukan upgrade, karena percaya bahwa versi baru Java tidak sepenuhnya kompatibel dengan versi sebelumnya, dan meningkatkannya akan membutuhkan banyak usaha. Secara pribadi, saya pikir itu perlu untuk ditingkatkan. Saya sudah menggunakan Java 17, meskipun saya mengalami beberapa masalah dengan pemutakhiran. Selain itu, perlu diingat bahwa Java 8 sudah lama tidak lagi menjadi layanan gratis. Kinerja Java 17 jauh lebih baik. Misalnya, dengan menggunakan ZGC, Anda tidak perlu lagi khawatir dalam mengonfigurasi pengaturan pengumpulan sampah. Jika Anda ingin bermigrasi dari Java 8 ke Java 17, Anda harus melakukan beberapa pekerjaan ekstra. Karena saya sudah menempuh rute ini, saya dapat berbagi pengalaman saya dalam bermigrasi ke versi baru.

Perbarui versi plugin kompiler Maven

Untuk beberapa pengembang, versi plugin kompiler Maven mungkin terlalu lama. Jika Anda ingin bekerja dengan Java 17, versi plugin kompiler Maven minimal harus 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> </konfigurasi> </plugin>

Perbarui dependensi

Langkah pertama saat memutakhirkan dari Java 8 ke Java 17 adalah memperbarui dependensi Anda. Karena ketergantungan yang awalnya Anda gunakan mungkin tidak mendukung Java 17 sama sekali, Anda harus memperbaruinya jika ingin meminimalkan dampak peningkatan versi. Jika tidak, Anda mungkin menghadapi sejumlah masalah. 1. Misalnya Lombok akan menyebabkan kesalahan kompilasi. Informasi kesalahannya adalah sebagai berikut:
Gagal menjalankan tujuan org.apache.maven.plugins:maven-compiler-plugin:3.2:compile (default-compile) pada proyek encloud-common: Kompilasi kesalahan fatal: java.lang.ExceptionInInitializerError: Tidak dapat menjadikan bidang pribadi com.sun .tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs dapat diakses: modul jdk.compiler tidak "membuka com.sun.tools.javac.processing" ke modul yang tidak disebutkan namanya
Karena Lombok memasukkan kode yang dihasilkan pada waktu kompilasi dan menggunakan kelas dari paket com.sun.tools.javac.* , Anda perlu memperbarui Lombok ke versi terbaru. Ini akan menyelesaikan masalah. 2. Koneksi zookeeper akan memunculkan kesalahan UnresolvedAddressException , informasi kesalahannya adalah sebagai berikut:
org.apache.zookeeper.ClientCnxn - Sesi 0x0 untuk server 10.0.*.*/<unresolved>:2181, kesalahan tak terduga, menutup koneksi soket dan mencoba menyambungkan kembali java.nio.channels.UnresolvedAddressException: null di 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.java:287) ~[zookeeper-3.4.13.jar :3 .4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03 ] di org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1021) ~[zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03] di org.apache.zookeeper.ClientCnxn$ Kirim Thread.jalankan(ClientCnxn .java:1064) [penjaga kebun binatang-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03]
Alasan kesalahan ini adalah di Java 15 metode toString untuk InetSocketAddressHolder telah difaktorkan ulang . Jika Anda menggunakan maven, Anda dapat menggunakan perintah mvn version:display-dependency-updates untuk memeriksa pembaruan ketergantungan. Hasilnya akan terlihat seperti ini: Rehat kopi #149.  Cara memutakhirkan dari Java 8 ke Java 17. Berbagai cara untuk mengulangi daftar di Java - 2

Tambahkan ketergantungan

Jika Anda mengkompilasi dengan JAXB, Anda akan menerima kesalahan. Ini karena JAXB telah dihapus dari Java 11. Jadi, Anda perlu menambahkan beberapa 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> <versi>2.3.0</version> </dependency>
Selain itu, Java 11 juga menghapus modul Java EE dan CORBA, jadi Anda harus menambahkan paket javax secara manual.
<dependency> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <version>1.3.2</version> </dependency>

Menangani InaccessibleObjectException

Jika Anda menggunakan refleksi dalam aplikasi Anda, terutama setAccessible(true) , kemungkinan besar Anda akan menerima kesalahan InaccessibleObjectException saat aplikasi dimulai. Kesalahan ini disebabkan oleh sistem modular platform Java, yang mengizinkan akses hanya dalam kondisi tertentu:
  1. Kelas harus bersifat publik.
  2. Anda harus mengekspor paket Anda sendiri.
Untuk mengatasi kesalahan ini, Anda dapat mengatur modul secara manual ke publik. Untuk melakukan ini, Anda perlu menambahkan opsi --add-opens ke baris perintah startup Java seperti yang ditunjukkan di bawah ini.
# --add-opens memiliki sintaks berikut: {modules}/{package}=ALL-UNNAMED java --add-opens java.base/java.lang=ALL-UNNAMED
Atau Anda dapat mengubah kode Java Anda untuk akhirnya menyelesaikan masalah ini.
module java.base {
    exports java.lang;
}
Secara keseluruhan, setelah menyelesaikan semua masalah di atas, aplikasi Anda akan berjalan dengan baik di Java 17. Saya harap artikel ini akan membantu Anda bermigrasi ke Java 17.

Berbagai cara untuk mengulangi daftar di Java

Sumber: Rrtutors Pada artikel ini, kita akan mempelajari beberapa cara untuk melakukan iterasi pada daftar di Java. Rehat kopi #149.  Cara memutakhirkan dari Java 8 ke Java 17. Berbagai cara untuk mengulangi daftar di Java - 3Kerangka Koleksi memiliki antarmuka Daftar yang memungkinkan kita memelihara koleksi objek yang terurut. Antarmuka Daftar diimplementasikan oleh ArrayList, LinkedList, Stack, dan Vector. Sejumlah besar aplikasi Java menggunakan ArrayList dan LinkedList. Ada beberapa cara untuk melakukan iterasi melalui daftar, yang masing-masing memiliki karakteristiknya sendiri.

Cara mengulangi daftar di Java

Anda dapat menggunakan tiga cara untuk mengulangi daftar di Java:
  • Menggunakan metode For Loop tingkat lanjut.
  • Menggunakan metode iterator.
  • Ulangi elemen forEach.

1. Menggunakan metode For Loop tingkat lanjut.

Ini adalah versi perulangan for dasar yang dapat digunakan untuk mengulangi daftar. Berikut ini contohnya:
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 metode iterator.

Anda juga dapat menggunakan iterator untuk mengulangi daftar. Iterator sangat berguna ketika Anda perlu mengubah daftar yang dapat diubah. 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. Ulangi elemen forEach.

Setelah fungsi lambda ditambahkan ke Java, sintaks bahasa memperkenalkan fungsi forEach, yang memungkinkan Anda melakukan iterasi pada koleksi apa pun. Contoh kode berikut menunjukkan bagaimana Anda dapat menggunakan metode forEach untuk melakukan iterasi pada daftar:
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