2016-04-13 12 views
1

foo()を何に置き換えるか?静的メソッド参照からクラス名を取得

class MethodIteration { 
    public static void main(String[] args) { 
    for (MyFuncInt m : new MyFuncInt[] { Class1::method, Class2::method }) 
     System.out.println(m.getClass().foo()); // want Class1, Class2 etc here 
    } 
} 

大変申し訳ございません。モバイルデバイス;)

私はクラスの外の静的メソッドを含むながら名前を取得したいので、それが言及した質問の重複はないと思います。私がm.getClass().getName()を試してみたら、 "MethodIteration $$ Lambda $ 1:[someHash]"が出ます。

答えて

0

は私が怖いあなたがすることはできません。 Class1::methodClass2::methodへの呼び出しは(それもラムダクラスの宣言されたフィールドではありません)ラップクラスにアクセスするためのメソッドを持たないMyFuncIntを実装ラムダ閉鎖、内にラップされています。

私はあなたが、機能インタフェースを使用することはできませんでしょうね。あなたは後でそれを取り出すことができますので、あなたはクラスへの参照(またはクラス名を持つ単なる文字列)を渡すためにファンクタを作る必要があるだろう:

class MyFunctor implements MyFuncInt { 

    public final Class<?> clazz; 
    private final MyFuncInt func; 

    public MyFunctor(Class<?> clazz, MyFuncInt func) { 
     this.clazz = clazz; 
     this.func = func; 
    } 

    @Override 
    public void doSomething() { 
     func.doSomething();  
    } 
} 

その後のようにインスタンス化:

new MyFunctor(Class1.class, Class1::method); 
+0

これは「恐れていた」が、感謝しています:) – carlsb3rg