वैरार्ग्स और जेनेरिक्स की समस्या
वैरार्ग्स (varargs) कार्यक्षमता Java में उन मेथड्स बनाने की सुविधा के लिए पेश की गई थी जो बिना ऐरे-टाइप पैरामीटर्स या उसी मेथड के ओवरलोडेड संस्करणों का सहारा लिए वेरिएबल संख्या में आर्गुमेंट्स स्वीकार कर सकें।
Java 9 से पहले, यदि वैरार्ग मेथड्स जेनेरिक्स के साथ उपयोग किए जाते थे, तो एक चेतावनी संदेश आता था। भले ही सभी मेथड्स हीप पॉल्यूशन नहीं बनाते, कंपाइलर जेनेरिक्स के साथ उपयोग किए गए सभी वैरार्ग मेथड्स के लिए चेतावनी दिखाता था। इसी कारण Java 9 में @SafeVarargs एनोटेशन जोड़ा गया ताकि इन चेतावनियों से बचा जा सके। यदि यह एनोटेशन जोड़ा जाता है, तो कंपाइलर ये चेतावनियां रोक देता है।
कंपाइल कमांड
javac -Xlint:unchecked SafeVarargsTest1.java
चेतावनी के साथ उदाहरण
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[]
...
SafeVarargsTest.java:9: warning: [unchecked] Possible heap pollution from parameterized vararg type List
...
@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]
@SafeVarargs एनोटेशन डेवलपर को इंगित करता है कि वैरार्ग्स पैरामीटर का उपयोग सुरक्षित है, जिससे अनावश्यक चेतावनियां दब जाती हैं।