Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java 9에서 @SafeVarargs가 필요한 이유는 무엇입니까?


변수 배열 유형에 의존하지 않고 다양한 수의 인수가 있는 메소드 생성을 용이하게 하는 기능이 Java에 도입되었습니다. 매개변수 또는 동일한 메소드의 오버로드된 버전.

Java 9 버전 이전의 경우 vararg 메소드 일반과 함께 사용됩니다. , 경고 메시지가 표시됩니다. . 모든 방법이 힙 오염을 생성하는 것은 아니지만 , 컴파일러는 경고를 표시합니다. 제네릭과 함께 사용되는 모든 vararg 메서드에 대해. 이것이 @SafeVarargs의 이유입니다. 이러한 경고를 피하기 위해 개념이 Java 9 버전에 추가되었습니다. 이 주석을 추가하면 컴파일러에서 이러한 경고를 중지합니다.

아래 명령을 사용하여 코드를 컴파일할 수 있습니다.

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[]
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]