次のようなコードを見てきました。
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
キーワードは、クラス オブジェクトを取得することを指定します。