3

文字列を使用してメソッドを呼び出そうとしていますか?

Kyle次の3つのメソッドを持つというクラスがあるとします。

public void Test();
public void Ronaldo();
public void MakeThis();

そして、呼び出す必要のあるメソッドの名前の文字列があります。

String text = "Test()";

次に、名前がこの文字列内にあるメソッドを呼び出す必要があります。

Kyle k = new Kyle();

k.text;

4

4 に答える 4

5

これを行うには、 Javaを使用する必要がありますReflection

参照:Class.getMethod()

特定の例を使用して:

String text = "Test";
Kyle k = new Kyle();
Class clas = k.getClass();

// you'll need to handle exceptions from these methods, or throw them:
Method method = clas.getMethod(text, null);
method.invoke(k, null);

getMethod()これは、とに必要な例外処理なしでありMethod.invoke()、引数をとらないメソッドを呼び出す場合のみをカバーします。

参照:

于 2012-06-19T19:43:50.860 に答える
3

リフレクションはJavaの興味深い機能です。基本的な内省が可能です。ここで使用k.getClass().getMethod()

例えば

String text = "Test";
Kyle k = new Kyle();
Method testMethod = k.getClass().getMethod(text, new Class<?>[] { 
    /*List parameter classes here eg. String.class , Kyle.class or leave empty for none*/} 
Object returnedValue = testMethod.invoke(k, new Object[] { 
    /* Parameters go here or empty for none*/});
于 2012-06-19T19:51:48.957 に答える
0

Reflectionと呼ばれるものを使用する必要があります。

于 2012-06-19T19:43:20.283 に答える
0

振り返ってみてください。

import java.lang.reflect.Method;
class Kyle {
    public void Test(){System.out.println("invoking Test()");}
    public void Ronaldo(){System.out.println("invoking Ronaldo()");}
    public void MakeThis(){System.out.println("invoking MakeThis()");}

    public static void main(String[] args) throws Exception{
        Kyle k=new Kyle();
        String text = "Test";
        Class c=k.getClass();
        Method m=c.getDeclaredMethod(text);
        m.invoke(k);
    }
}

出力

invoking Test()

于 2012-06-19T19:49:14.057 に答える