JavaRush /จาวาบล็อก /Random-TH /คอฟฟี่เบรค #149. วิธีอัปเกรดจาก Java 8 เป็น Java 17 วิธีต...

คอฟฟี่เบรค #149. วิธีอัปเกรดจาก Java 8 เป็น Java 17 วิธีต่างๆ ในการวนซ้ำรายการใน Java

เผยแพร่ในกลุ่ม

วิธีย้ายจาก Java 8 ไปเป็น Java 17

ที่มา: ปานกลาง การใช้เอกสารนี้ทำให้คุณสามารถอัปเกรดจาก Java 8 เป็น Java 17 ได้อย่างง่ายดาย คอฟฟี่เบรค #149.  วิธีอัปเกรดจาก Java 8 เป็น Java 17 วิธีต่างๆ ในการวนซ้ำรายการใน Java - 1 Java รุ่นใหม่แต่ละรุ่น โดยเฉพาะอย่างยิ่งหากเรากำลังพูดถึงเวอร์ชันการสนับสนุนระยะยาว (LTS) จะทำให้นักพัฒนามีคุณสมบัติและฟังก์ชันใหม่ ๆ มากมาย โดยกำจัด ข้อผิดพลาดที่ค้นพบก่อนหน้านี้และปรับปรุงประสิทธิภาพ แต่จนถึงตอนนี้แม้ว่า Java 17 จะเปิดตัวเมื่อเกือบปีที่แล้ว แต่เวอร์ชันภาษาที่ได้รับความนิยมสูงสุดยังคงเป็น Java 8 หลายคนลังเลที่จะอัปเกรดโดยเชื่อว่า Java เวอร์ชันใหม่เข้ากันไม่ได้กับเวอร์ชันก่อนหน้าอย่างสมบูรณ์ และการอัปเกรดเป็นจะต้องใช้ความพยายามอย่างมาก ส่วนตัวผมคิดว่าจำเป็นต้องอัพเกรด ฉันใช้ Java 17 อยู่แล้ว แม้ว่าฉันจะมีปัญหากับการอัพเกรดก็ตาม นอกจากนี้ยังควรพิจารณาว่า Java 8 หยุดให้บริการฟรีมานานแล้ว ประสิทธิภาพของ Java 17 ดีขึ้นมาก ตัวอย่างเช่น เมื่อใช้ ZGC คุณจะไม่ต้องกังวลกับการกำหนดการตั้งค่าการรวบรวมขยะอีกต่อไป หากคุณต้องการย้ายจาก Java 8 ไปเป็น Java 17 คุณจะต้องทำงานเพิ่มเติมบางอย่าง เนื่องจากฉันได้ใช้เส้นทางนี้แล้ว ฉันจึงสามารถแบ่งปันประสบการณ์ในการย้ายไปยังเวอร์ชันใหม่ได้

อัปเดตเวอร์ชันของปลั๊กอินคอมไพเลอร์ Maven

สำหรับนักพัฒนาบางราย เวอร์ชันของปลั๊กอินคอมไพเลอร์ Maven อาจเก่าเกินไป หากคุณต้องการทำงานกับ Java 17 เวอร์ชันปลั๊กอินคอมไพเลอร์ Maven ต้องมีอย่างน้อย 3.5.4
<ปลั๊กอิน> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <การกำหนดค่า> <source>17</source> <target>17</target> </configuration> </plugin>

อัปเดตการอ้างอิง

ขั้นตอนแรกเมื่ออัพเกรดจาก Java 8 เป็น Java 17 คือการอัปเดตการพึ่งพาของคุณ เนื่องจากการอ้างอิงที่คุณใช้ในตอนแรกอาจไม่รองรับ Java 17 เลย คุณจะต้องอัปเดตหากคุณต้องการลดผลกระทบของการอัพเกรดเวอร์ชันให้เหลือน้อยที่สุด มิฉะนั้นคุณอาจประสบปัญหามากมาย 1. ตัวอย่างเช่น ลอมบอกจะทำให้เกิดข้อผิดพลาดในการคอมไพล์ ข้อมูลข้อผิดพลาดมีดังนี้:
ไม่สามารถดำเนินการเป้าหมาย org.apache.maven.plugins:maven-compiler-plugin:3.2:compile (คอมไพล์เริ่มต้น) ในโครงการ encloud-common: การคอมไพล์ข้อผิดพลาดร้ายแรง: java.lang.ExceptionInInitializerError: ไม่สามารถสร้างฟิลด์ส่วนตัว com.sun .tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs เข้าถึงได้: โมดูล jdk.compiler ไม่ "เปิด com.sun.tools.javac.processing" ไปยังโมดูลที่ไม่มีชื่อ
เนื่องจากลอมบอกแทรกโค้ดที่สร้างขึ้นในเวลาคอมไพล์ และใช้คลาสจาก แพ็คเกจ com.sun.tools.javac.*คุณจึงต้องอัปเดตลอมบอกเป็นเวอร์ชันล่าสุด นี่จะช่วยแก้ปัญหาได้ 2. การเชื่อมต่อผู้ดูแลสวนสัตว์จะทำให้เกิด ข้อผิดพลาด UnresolvedAddressExceptionข้อมูลข้อผิดพลาดจะเป็นดังนี้:
org.apache.zookeeper.ClientCnxn - เซสชัน 0x0 สำหรับเซิร์ฟเวอร์ 10.0.*.*/<unresolved>:2181 ข้อผิดพลาดที่ไม่คาดคิด การปิดการเชื่อมต่อซ็อกเก็ต และพยายามเชื่อมต่อ java.nio.channels.UnresolvedAddressException: null ที่ sun.nio.ch Net .checkAddress(Net.java:149) ~[?:?] ที่ sun.nio.ch.Net.checkAddress(Net.java:157) ~[?:?] ที่ sun.nio.ch.SocketChannelImpl.checkRemote( SocketChannelImpl .java:816) ~[?:?] ที่ sun.nio.ch.SocketChannelImpl.connect (SocketChannelImpl.java:839) ~[?:?] ที่ org.apache.zookeeper.ClientCnxnSocketNIO.registerAndConnect (ClientCnxnSocketNIO.java: 277 ) ~[zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03] ที่ org.apache.zookeeper.ClientCnxnSocketNIO.connect(ClientCnxnSocketNIO.java:287) ~[zookeeper-3.4.13 .โถ:3 .4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03 ] ที่ org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1021) ~[zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03] ที่ org.apache.zookeeper.ClientCnxn$ ส่ง Thread.run(ClientCnxn . java:1064) [ผู้ดูแลสวนสัตว์-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03]
สาเหตุของข้อ ผิด พลาดคือใน Java 15 วิธี การ toStringสำหรับInetSocketAddressHolder ได้รับการปรับโครงสร้างใหม่ หากคุณใช้ maven คุณสามารถใช้ คำสั่ง mvn version:display-dependency-updatesเพื่อตรวจสอบการอัปเดตการพึ่งพาได้ ผลลัพธ์จะมีลักษณะดังนี้: คอฟฟี่เบรค #149.  วิธีอัปเกรดจาก Java 8 เป็น Java 17 วิธีต่างๆ ในการวนซ้ำรายการใน Java - 2

เพิ่มการพึ่งพา

หากคุณคอมไพล์ด้วย JAXB คุณจะได้รับข้อผิดพลาด นี่เป็นเพราะ JAXB ถูกลบออกจาก Java 11 ดังนั้นคุณต้องเพิ่มการอ้างอิง JAXB Maven บางส่วน
<การพึ่งพา> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.0</version> </การพึ่งพา> <การพึ่งพา> <groupId>com.sun.xml .bind</groupId> <artifactId>jaxb-core</artifactId> <version>2.3.0</version> </dependency> <การพึ่งพา> <groupId>com.sun.xml.bind</groupId> <artifactId> jaxb-impl</artifactId> <version>2.3.0</version> </การพึ่งพา>
นอกจากนี้ Java 11 ยังลบโมดูล Java EE และ CORBA ดังนั้นคุณจะต้องเพิ่มแพ็คเกจ javax ด้วยตนเอง
<การพึ่งพา> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <version>1.3.2</version> </dependency>

การจัดการ InaccessibleObjectException

หากคุณใช้การสะท้อนกลับในแอปพลิเคชันของคุณ โดยเฉพาะsetAccessible(true)คุณจะได้รับ ข้อผิดพลาด InaccessibleObjectExceptionเมื่อแอปพลิเคชันเริ่มทำงาน ข้อผิดพลาดนี้เกิดจากระบบโมดูลาร์ของแพลตฟอร์ม Java ซึ่งอนุญาตให้เข้าถึงได้ภายใต้เงื่อนไขบางประการเท่านั้น:
  1. ชั้นเรียนจะต้องเป็นแบบสาธารณะ
  2. คุณต้องส่งออกแพ็คเกจของคุณเอง
เพื่อแก้ไขข้อผิดพลาดนี้ คุณสามารถตั้งค่าโมดูลให้เป็นสาธารณะได้ด้วยตนเอง ในการดำเนินการนี้ คุณจะต้องเพิ่ม ตัวเลือก --add-opensให้กับบรรทัดคำสั่งเริ่มต้นระบบ Java ดังที่แสดงด้านล่าง
# --add-opens มีไวยากรณ์ต่อไปนี้: {modules}/{package}=ALL-UNNAMED java --add-opens java.base/java.lang=ALL-UNNAMED
หรือคุณสามารถเปลี่ยนโค้ด Java ของคุณเพื่อแก้ไขปัญหานี้ได้ในที่สุด
module java.base {
    exports java.lang;
}
โดยรวมแล้ว หลังจากแก้ไขปัญหาข้างต้นทั้งหมดแล้ว แอปพลิเคชันของคุณควรทำงานได้ดีบน Java 17 ฉันหวังว่าบทความนี้จะช่วยคุณในการโยกย้ายไปยัง Java 17

วิธีต่างๆ ในการวนซ้ำรายการใน Java

ที่มา: Rrtutors ในบทความนี้ เราจะเรียนรู้วิธีต่างๆ มากมายในการวนซ้ำรายการใน Java คอฟฟี่เบรค #149.  วิธีอัปเกรดจาก Java 8 เป็น Java 17 วิธีต่างๆ ในการวนซ้ำรายการใน Java - 3กรอบงานคอลเลกชันมีอินเทอร์เฟซรายการที่ช่วยให้เราสามารถรักษาคอลเลกชันของออบเจ็กต์ที่เรียงลำดับไว้ได้ อินเทอร์เฟซรายการถูกนำมาใช้โดย ArrayList, LinkedList, Stack และ Vector แอปพลิเคชัน Java จำนวนมากใช้ ArrayList และ LinkedList มีหลายวิธีในการวนซ้ำรายการ ซึ่งแต่ละวิธีมีลักษณะเฉพาะของตัวเอง

วิธีวนซ้ำรายการใน Java

คุณสามารถใช้สามวิธีในการวนซ้ำรายการใน Java:
  • ใช้วิธี For Loop ขั้นสูง
  • การใช้วิธีวนซ้ำ
  • วนซ้ำองค์ประกอบ forEach

1. ใช้วิธี For Loop ขั้นสูง

นี่คือเวอร์ชันของ for loop พื้นฐานที่สามารถใช้เพื่อวนซ้ำรายการ นี่คือตัวอย่าง:
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+ " ");
        }
            }
}
บทสรุป:
100 200 300 400

2. การใช้วิธีวนซ้ำ

คุณยังสามารถใช้ตัววนซ้ำเพื่อวนซ้ำรายการได้ ตัววนซ้ำมีประโยชน์อย่างยิ่งเมื่อคุณต้องการแก้ไขรายการที่สามารถวนซ้ำได้ ตัวอย่าง:
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();
                        }

            }
            }
}
บทสรุป:
100 200 300

3. วนซ้ำองค์ประกอบสำหรับแต่ละองค์ประกอบ

หลังจากเพิ่มฟังก์ชัน lambda ลงใน Java แล้ว ไวยากรณ์ของภาษาก็แนะนำฟังก์ชัน forEach ซึ่งช่วยให้คุณสามารถวนซ้ำคอลเลกชันใดๆ ได้ ตัวอย่างโค้ดต่อไปนี้แสดงวิธีที่คุณสามารถใช้ forEach วิธีการวนซ้ำรายการ:
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);
            }
}
บทสรุป:
1 2 3 4
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION