2

假设我有这样的课程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()安全地隐藏(因为运行时,采取而不是of )?Foo.invoke()Bar.invoke()ObjectObject[]Foo.invoke()

与此相关:转发Bar.invoke()是否Foo.invoke()安全无虞?

4

1 回答 1

1

Bar.invoke不覆盖Foo.invoke. 如果您只调用bar.invoke没有参数,您将被foo.invoke调用。

reference to invoke is ambiguous但是如果你构造一个Barobject:Bar<Object, Object[]> bar = new Bar<Object, Object[]>()然后调用,你会得到一个编译时错误 ( ),bar.invoke(new Object[]{})因为这 2 个调用方法在运行时具有相同的擦除。

于 2012-09-01T08:16:02.270 回答