假设我有一个类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()
转发到{{1}}安全又好吗?
答案 0 :(得分:1)
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个调用方法有在运行时擦除相同的内容。