2

次のようなコードを見てきました。

void foo(Class<? extends SomeInterface> clazz)

私は次のようなクラスを持っています:

class ClassA implements SomeInterface

私がしようとしていたとき:

ClassA a = new ClassA();
foo(a);

Eclipseは「メソッドは適用できません」のようなものを与えました。

私は何か見落としてますか?

4

2 に答える 2

7

このfooメソッドは、Classそのクラスのインスタンスではなく、オブジェクトをパラメーターとして受け取ります。

代わりにクラス リテラルを使用してみてください。

foo(ClassA.class);

ClassA.classはクラスのクラス リテラルでありClassAClass<ClassA>パラメータの説明に適合するClass<? extends SomeInterface>です。

foo(a);コンパイルするために、の署名は異なっfooていたでしょう:

void foo(SomeInterface bar)
于 2013-07-27T00:13:37.107 に答える
1

Classそれ自体がオブジェクトであり、オブジェクトfoo(の限定されたワイルドカードが必要Classです。

ClassA実際に実装/拡張する場合SomeInterface(どちらか一方、別の用語を使用)、 を渡しClassA.classます。classキーワードは、クラス オブジェクトを取得することを指定します

于 2013-07-27T00:14:14.123 に答える