假设我有一个类 Foo
像这样:
public class Foo<T> {
protected T invoke(Object... args);
}
现在假设我添加这个:
public class Bar<T, Arg> extends Foo<T> {
public T invoke(Arg arg);
}
这是否意味着我无法创建 Bar<T, Object[]>
因为它会创建两个 invoke()
具有“本质上”相同签名的方法?或者会 Bar.invoke()
安全隐藏 Foo.invoke()
在这种情况下(因为 Bar.invoke()
在运行时是采用 Object
而不是 Object[]
的 Foo.invoke()
)?
相关:正在转发Bar.invoke()
至 Foo.invoke()
安全好吗?
最佳答案
Bar.invoke
不会覆盖 Foo.invoke
.如果你只打电话 bar.invoke
没有参数你会得到 foo.invoke
打电话。
但是如果你构造一个 reference to invoke is ambiguous
,你会得到一个编译时错误 ( Bar
)对象:Bar<Object, Object[]> bar = new Bar<Object, Object[]>()
然后调用 bar.invoke(new Object[]{})
因为这 2 个调用方法在运行时具有相同的删除。
关于java - Java 中具有继承性的 Varargs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12226040/