次のようなコードを見てきました。
void foo(Class<? extends SomeInterface> clazz)
私は次のようなクラスを持っています:
class ClassA implements SomeInterface
私がしようとしていたとき:
ClassA a = new ClassA();
foo(a);
Eclipseは「メソッドは適用できません」のようなものを与えました。
私は何か見落としてますか?
このfooメソッドは、Classそのクラスのインスタンスではなく、オブジェクトをパラメーターとして受け取ります。
代わりにクラス リテラルを使用してみてください。
foo(ClassA.class);
ClassA.classはクラスのクラス リテラルでありClassA、Class<ClassA>パラメータの説明に適合するClass<? extends SomeInterface>です。
foo(a);コンパイルするために、の署名は異なっfooていたでしょう:
void foo(SomeInterface bar)
Classそれ自体がオブジェクトであり、オブジェクトfoo(の限定されたワイルドカードが必要Classです。
ClassA実際に実装/拡張する場合SomeInterface(どちらか一方、別の用語を使用)、 を渡しClassA.classます。classキーワードは、クラス オブジェクトを取得することを指定します。