接口方法@SafeVarargs
在此代码中,
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
}
}
由于注释,使用引用时不会发生警告。Type safety: A generic array of T is created for a varargs parameter
Collector<T>
@SafeVarargs
但是,通过接口访问该方法时,确实会出现警告。在接口方法上,是无效的(这是显而易见的,因为编译器不能对方法体中参数的用法执行任何检查)。CollectorIF<T>
@SafeVarargs
通过接口访问方法时如何避免警告?