Trong mã này,@SafeVarargs về phương pháp giao diện
package com.example;
interface CollectorIF<T> {
// @SafeVarargs // Error: @SafeVarargs annotation cannot be applied to non-final instance method addAll
void addAll(T... values);
}
class Collector<T> implements CollectorIF<T> {
@SafeVarargs
public final void addAll(T... values) {
}
}
class Component<T> {
public void compute(T value) {
Collector<T> col1 = new Collector<>();
col1.addAll(value); // No warning
CollectorIF<T> col2 = new Collector<>();
col2.addAll(value); // Type safety: A generic array of T is created for a varargs parameter
}
}
cảnh báo Type safety: A generic array of T is created for a varargs parameter
không xảy ra khi sử dụng một tài liệu tham khảo Collector<T>
, do @SafeVarargs
chú thích.
Tuy nhiên, cảnh báo hiện xảy ra khi truy cập phương thức qua giao diện CollectorIF<T>
. Trên các phương thức giao diện, @SafeVarargs
không hợp lệ (điều này hiển nhiên vì trình biên dịch không thể thực hiện bất kỳ kiểm tra nào về việc sử dụng tham số trong phần thân phương thức).
Làm cách nào để tránh cảnh báo khi truy cập phương thức thông qua giao diện?
Có liên quan (không có câu trả lời) http://stackoverflow.com/questions/15518302/java-varargs-in-interface – Tunaki