Varargs ফাংশনালিটি জাভা-তে একটি মেথডে ভেরিয়েবল সংখ্যক আর্গুমেন্ট নেওয়ার সুবিধা দেওয়ার জন্য এসেছে, array-type প্যারামিটার বা একই মেথডের ওভারলোডেড ভার্সন রিসোর্ট না করেই।
জাভা ৯-এর আগের ভার্সনে, যদি vararg মেথড জেনেরিকস দিয়ে ব্যবহার করা হত, তবে একটি ওয়ার্নিং মেসেজ আসত। যদিও সব মেথড হিপ পলিউশন তৈরি করে না, কম্পাইলার সকল vararg মেথডের জন্য জেনেরিকস দিয়ে ওয়ার্নিং দেখাত। এটাই कारনে জাভা ৯-এ @SafeVarargs কনসেপ্ট যোগ করা হয়েছে এই ওয়ার্নিংগুলো এড়ানোর জন্য। এই অ্যনোটেশন যোগ করলে কম্পাইলার ওয়ার্নিংগুলো বন্ধ করে দেয়।
কম্পাইল কমান্ড
javac -Xlint:unchecked SafeVarargsTest1.java
উদাহরণ ১: @SafeVarargs ছাড়া (ওয়ার্নিং দেখাবে)
import java.util.Arrays;
import java.util.List;
public class SafeVarargsTest1 {
public static void main(String args[]) {
SafeVarargsTest1 test = new SafeVarargsTest1();
test.varargsMethod(Arrays.asList("Adithya", "Jaidev"), Arrays.asList("Raja", "Chaitanya"));
}
private void varargsMethod(List<String>... list) {
for(List list1: list)
System.out.println(list1);
}
}
আউটপুট (ওয়ার্নিংসহ)
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
[Adithya, Jaidev] [Raja, Chaitanya]
উদাহরণ ২: @SafeVarargs দিয়ে (ওয়ার্নিং নেই)
import java.util.Arrays;
import java.util.List;
public class SafeVarargsTest2 {
public static void main(String args[]) {
SafeVarargsTest2 test = new SafeVarargsTest2();
test.varargsMethod(Arrays.asList("Adithya", "Jaidev"), Arrays.asList("Raja", "Chaitanya"));
}
@SafeVarargs
private void varargsMethod(List<String>... list) {
for(List list1: list)
System.out.println(list1);
}
}
আউটপুট (ওয়ার্নিং নেই)
[Adithya, Jaidev] [Raja, Chaitanya]