Computer >> Máy Tính >  >> Lập trình >> Java

Tại sao @SafeVarargs được yêu cầu trong Java 9?


kỳ đà chức năng đã được giới thiệu trong Java để tạo điều kiện thuận lợi cho việc tạo các phương thức với số lượng đối số thay đổi mà không cần dùng đến kiểu mảng tham số hoặc phiên bản quá tải của cùng một phương thức.

Trước phiên bản Java 9, nếu phương thức vararg được sử dụng với generic , sau đó có một thông báo cảnh báo . Mặc dù không phải tất cả các phương pháp đều tạo ra ô nhiễm đống , trình biên dịch hiển thị cảnh báo cho tất cả các phương pháp vararg được sử dụng với thuốc chung. Đó là lý do @SafeVarargs khái niệm đã được thêm vào phiên bản Java 9 để tránh những cảnh báo này. Nếu chúng tôi đã thêm chú thích này, thì trình biên dịch sẽ dừng các cảnh báo này.

Chúng tôi có thể biên dịch mã bằng cách sử dụng lệnh dưới đây

javac -Xlint:unchecked SafeVarargsTest1.java

Trong ví dụ dưới đây, trình biên dịch hiển thị thông báo cảnh báo cho người dùng.

Ví dụ

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);
   }
}

Đầu ra

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]


I trong ví dụ dưới đây, chúng tôi đã áp dụng @SafeVarargs trước phương pháp riêng tư . Vì vậy, nó không hiển thị bất kỳ thông báo cảnh báo nào.

Ví dụ

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);
   }
}

Đầu ra

[Adithya, Jaidev]
[Raja, Chaitanya]