Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

เหตุใดจึงต้องมี @SafeVarargs ใน Java 9


The varargs ฟังก์ชันการทำงานได้รับการแนะนำใน Java เพื่ออำนวยความสะดวกในการสร้างเมธอดที่มีอาร์กิวเมนต์จำนวนตัวแปรโดยไม่ต้องใช้ ประเภทอาร์เรย์ พารามิเตอร์หรือวิธีการเดียวกันเวอร์ชันที่โอเวอร์โหลด

ก่อนเวอร์ชัน Java 9 หาก เมธอด vararg ใช้กับ ยาสามัญ แล้วมี ข้อความเตือน . แม้จะไม่ใช่ทุกวิธีที่จะทำให้เกิดมลพิษกอง , คอมไพเลอร์แสดง คำเตือน สำหรับวิธีการ vararg ทั้งหมดที่ใช้กับยาชื่อสามัญ นั่นคือเหตุผล @SafeVarargs เพิ่มแนวคิดในเวอร์ชัน Java 9 เพื่อหลีกเลี่ยงคำเตือนเหล่านี้ หากเราเพิ่มคำอธิบายประกอบนี้ คอมไพเลอร์จะหยุดคำเตือนเหล่านี้

เราสามารถคอมไพล์โค้ดได้โดยใช้คำสั่งด้านล่าง

javac -Xlint:unchecked SafeVarargsTest1.java 

ในตัวอย่างด้านล่าง คอมไพเลอร์จะแสดงข้อความเตือนไปยังผู้ใช้

ตัวอย่าง

<ก่อนหน้า>นำเข้า java.util.Arrays;import java.util.List; คลาสสาธารณะ SafeVarargsTest1 { โมฆะสาธารณะหลัก (String args []) { การทดสอบ SafeVarargsTest1 =ใหม่ SafeVarargsTest1 (); ทดสอบvarargsMethod (Arrays.asList ("Adithya", "Jaidev"), Arrays.asList("ราชา", "Chaitanya")); } โมฆะส่วนตัว varargsMethod(List ... รายการ) { สำหรับ (รายการ list1:รายการ) System.out.println (list1); }}

ผลลัพธ์

SafeVarargsTest.java:7:คำเตือน:[ไม่ได้เลือก] ไม่ได้ตรวจสอบการสร้างอาร์เรย์ทั่วไปสำหรับพารามิเตอร์ varargs ประเภท List[]test.varargsMethod(Arrays.asList("Adithya", "Jaidev"), Arrays.asList( "ราชา", "ชัยตันยา"));^SafeVarargsTest.java:9:Warning:[unchecked] Possible heap Pollution จาก Pararg type Listprivate void varargsMethod(List... list) {^2 warnings [Adithya, Jaidev][ราชา, Chaitanya] 


ฉัน ในตัวอย่างด้านล่าง เราได้ใช้ @SafeVarargs ก่อน วิธีส่วนตัว . จึงไม่แสดงข้อความเตือน

ตัวอย่าง

<ก่อนหน้า> นำเข้า java.util.Arrays; นำเข้า java.util.List; SafeVarargsTest2 คลาสสาธารณะ { โมฆะคงที่สาธารณะหลัก (สตริง args []) { การทดสอบ SafeVarargsTest2 =ใหม่ SafeVarargsTest2 (); ทดสอบvarargsMethod (Arrays.asList("Adithya", "Jaidev"), Arrays.asList("ราชา", "Chaitanya")); } @SafeVarargs โมฆะส่วนตัว varargsMethod(List ... รายการ) { สำหรับ (รายการ list1:รายการ) System.out.println (list1); }}

ผลลัพธ์

[Adithya, Jaidev][ราชา, Chaitanya]