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[]>2 つのメソッドを作成するため、作成できないということですか? invoke()または、この場合、Bar.invoke()安全に非表示になりますか (実行時は、 ofではなく取得します)?Foo.invoke()Bar.invoke()ObjectObject[]Foo.invoke()

これに関連して: 転送Bar.invoke()Foo.invoke()安全で問題ありませんか?

4

1 に答える 1

1

Bar.invokeオーバーライドしませんFoo.invokebar.invoke引数なしで呼び出すと、foo.invoke呼び出されます。

ただし、オブジェクトを作成してから呼び出すと、コンパイル時エラー ( reference to invoke is ambiguous) が発生します。これは、2 つの呼び出しメソッドが実行時に同じ消去を行うためです。BarBar<Object, Object[]> bar = new Bar<Object, Object[]>()bar.invoke(new Object[]{})

于 2012-09-01T08:16:02.270 に答える