2017-10-01 5 views
0

タイトルのとおりです。私はjava:クラスを渡して静的メンバーを呼び出すにはどうしたらいいですか?

class MyType { 
    static int g() {...} 
} 

がクラスに

void h(Class<MyType> cls) {...} 

を受け取る機能は何とかこのメソッドにアクセスすることができます機能

f(MyType.class) 

にクラスを渡ししようとしていますか?その関数hを考える

+1

これは静的メソッドの仕組みではなく、リフレクションでのみアクセスできますが、推奨しません。より良い方法は、funtionalインターフェイスを使用して、提供された引数(nesseccaryの場合)に対してアクションを判断させることです。 – n247s

答えて

1

が渡されるクラスがMyTypeを必要とし、私はパラメータが依存するだろうとして、あなたはあなたのクラスのg()メソッドを呼び出すことができませんでしたMyType.g();

+0

メソッドのスコープを忘れないでください。 – AKSW

+1

良い点ですが、これはサブクラスでは機能しません –

+0

True。サンプルコードを共有しても、スコープがパッケージ外にあることは示されません。 'cls'パラメータの関連する使用法は' h'ではありません。 –

1

のスタティックアクセスフォームを使用しない理由を見ることはできませんClassタイプです。 Classによって提供されるメソッドのみを呼び出すことができます。

MyTypeのインスタンスを渡してメソッドインスタンスを呼び出すと、より自然なように見えます。
複数のクラスでg()を定義した場合、このメソッドをインターフェイスで定義し、これらのクラスで実装します。

1

技術的にはあなたがリフレクションを使用してそれを行うことができます。

Class klass = ...; 
Method m = klass.getDeclaredMethod(methodName, paramtypes); 
m.invoke(null, args) 

が、Javaのための自然ではないその何かを、それはこのように、このメソッドを持っているいくつかのインタフェースの関数オブジェクトに渡す方が良いでしょう:

interface MyType { 
    int g(); 
} 

void h(MyType myType) { 
    myType.g(); 
} 
関連する問題