Ciri varargs telah diperkenalkan di Java untuk memudahkan penciptaan kaedah dengan bilangan parameter yang berubah-ubah tanpa menggunakan parameter jenis tatasusunan atau versi terlebih muatan kaedah yang sama.
Sebelum versi Java 9, terdapat mesej amaran jika kaedah vararg digunakan dengan generik. Walaupun tidak semua kaedah menghasilkan pencemaran timbunan, pengkompil memaparkan amaran untuk semua kaedah variadik yang digunakan dengan generik. Itulah sebabnya konsep @SafeVarargs telah ditambahkan dalam versi Java 9 untuk mengelakkan amaran ini. Jika kami menambah anotasi ini, pengkompil akan menghentikan amaran ini.
Kita boleh menyusun kod menggunakan arahan berikut
<strong>javac -Xlint:unchecked SafeVarargsTest1.java</strong>
Dalam contoh di bawah, pengkompil memaparkan mesej amaran kepada pengguna.
import java.util.Arrays; import java.util.List; public class SafeVarargsTest1 { public static void main(String args[]) { SafeVarargsTest1 test = new SafeVarargsTest1(); test.<strong>varargsMethod</strong>(<strong>Arrays.asList</strong>("Adithya", "Jaidev"), Arrays.asList("Raja", "Chaitanya")); } private void varargsMethod(<strong>List<String></strong>... list) { for(List list1: list) System.out.println(list1); } }
<strong>SafeVarargsTest.java:7: warning: [unchecked] unchecked generic array creation for varargs parameter of type List[] test.varargsMethod(Arrays.asList("Adithya", "Jaidev"), Arrays.asList("Raja", "Chaitanya")); ^ SafeVarargsTest.java:9: warning: [unchecked] Possible heap pollution from parameterized vararg type List private void varargsMethod(List... list) { ^ 2 warnings</strong> <strong>[Adithya, Jaidev] [Raja, Chaitanya]</strong>
Dalam contoh di bawah, kami menggunakan @SafeVarargs sebelum kaedah peribadi. Oleh itu, ia tidak memaparkan sebarang mesej amaran.
import java.util.Arrays; import java.util.List; public class SafeVarargsTest2 { public static void main(String args[]) { SafeVarargsTest2 test = new SafeVarargsTest2(); test.<strong>varargsMethod</strong>(Arrays.asList("Adithya", "Jaidev"), Arrays.asList("Raja", "Chaitanya")); } <strong>@SafeVarargs</strong> private void varargsMethod(<strong>List<String></strong>... list) { for(List list1: list) System.out.println(list1); } }
<strong>[Adithya, Jaidev] [Raja, Chaitanya]</strong>
Atas ialah kandungan terperinci Mengapa saya perlu menggunakan @SafeVarargs dalam Java 9?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!