yka*_*ich 13 java eclipse generics variadic-functions
在我的代码中,当类型是数组时,在实现泛型方法时使用varargs似乎很方便:
public interface Codec<D,E> {
  E encode(D decoded);
  D decode(E encoded);
}
public class MyCodec implements Codec<byte[], char[]> {
  @Override char[] encode(byte... decoded) {...}
  @Override byte[] decode(char... encoded) {...}
}
当我写这篇文章时,Eclipse会显示一条警告:
与MyCodec.encode(byte ...)和Codec.encode(byte [])不同,Varargs方法只应覆盖或覆盖其他varargs方法
我应该忽略这个警告,还是会导致一些无法预料的问题?
这是一个特定于Eclipse的警告.它与泛型无关,可以通过此示例重现:
class A {
    m(int[] ints) { }
}
class B extends A {
    @Override
    m(int... ints) { }
}
正如其他答案所指出的那样,varargs纯粹是一个编译时功能,在运行时没有区别.我试图寻找警告背后的具体原因,但无法改变任何事情.可能在varargs和非varargs之间交替方法覆盖被认为是不好的做法,因为它令人困惑和随意.但这通常是 - 只要调用者总是使用静态类型MyCodec而不是编码来与a接口,你的用例似乎更合理Codec<byte[], char[]>.
不幸的是,没有办法压制这个警告 - 即使@SuppressWarnings("all")不会让它屈服.考虑到警告是多么模糊,这是不幸的.以下是关于同一问题的古老对话:http://echelog.com/logs/browse/eclipse/1196982000(滚动到20:45:02) - 证明在你之前很久就有点人.看起来像是一个无法抑制的Eclipse bug.