0

performActions値が「openURL」と「closeBrowser」の配列リストがあるとします。これらの値 (openURL と closeBrowsers) とメソッドはどちらも別のクラスにあります。

performActionsarraylistから値を取得してこれらのメソッドを呼び出すにはどうすればよいですか?

具体的にはperformAction.get(0)、「openURL」メソッドを実行する必要があります。

4

5 に答える 5

1

シンプルに保ち、文字列比較を使用してメソッドを実行します。

List<String> items; // from Excel

for (String item : items) {
    // for example, item might be: openURL("www.google.com")

    if (item.startsWith("openURL(")) {
        // parse out the actual url
        String url = item.replaceAll(".*\"(.*)\".*", "$1");
        openURL(url);
    } else if (item.startsWith("closeURL(")) {
        // etc
    }
}
于 2012-09-24T20:10:32.730 に答える
1

いいえ、あなたが説明したことを行う簡単な方法はありません (リフレクションを使用することはできますが、私はそれをお勧めしません)。ただし、一連の整数を格納し、それらの整数をさまざまな機能を実行するための「コード」として使用できます。これは、メソッド自体を保存することに多少似ています。

public void runMethod(int n) {
    switch (n) {
        case 1:
            // do something (e.g. run a certain method)
            break;
        case 2:
            // do something else (e.g. run another method)
            break;
        ...
    }
}

したがって、あなたの場合、openURLおそらく と で表すこと1closeBrowserでき2ます(もちろん、任意の 2 つの整数を使用できます)。次に、これらの値を に保存しArrayList<Integer>、その後、リストをループしてrunMethod各値に対してメソッド like を呼び出し、それによって目的のメソッドを実行します。

編集: メソッドに引数が必要な場合は、Maps の代わりにArrayLists を使用して、(メソッドを表す) 整数をその引数にマッピングする同様の概念を常に採用できます。

于 2012-09-24T20:06:21.330 に答える
0

がMethodArrayListを含み、メソッドが静的であると仮定すると、Method.invoke(null, null)を使用できます

メソッド参照が静的でない場合は、それを実行するために何らかのコンテキストを提供する必要があります。

Methodラッパークラスで実行されるandをラップしObject、呼び出し/実行メソッドを提供します...

public class ProxyMethod {
    private Method method;
    priavte Object instance;

    public ProxyMethod(Object instance, Method method) {
        this.instance = instance;
        this.method = method;
    }

    public void invoke() {
        method.invoke(this, null);
    }
}

必要に応じて、パラメーターも指定できるようになりました...

public class ProxyMethod {
    // Previous decelerations...

    private Object[] parameters;

    public ProxyMethod(Object instance, Method method, Object... parameters) {
        this(instance, methd);
        this.parameters = parameters;
    }

    public void invokeWith() {
        method.invoke(this, parameters);
    }

    public void invokeWith(Object... parameters) {
        method.invoke(this, parameters);
    }
于 2012-09-24T20:17:55.817 に答える
0

私はスクリプト言語を使用します:

  • Java 6 に JavaScript Rhino が組み込まれている
  • Groovy コードを呼び出すことができます
  • MVEL などの単純な式言語インタープリターを使用できます。
  • 関数が2つしかない場合は、自分で表記を解析できます
于 2012-09-24T20:18:05.680 に答える
0

反射を使用します。

例: メソッド method = getClass().getMethod(yourarraylist.get(0)); method.invoke(これ);

これは、jdbc ドライバーをロードするときに行うことと似ています。

リフレクションについて読むことをお勧めします。これは役立ちます:-)

于 2012-09-24T20:06:10.263 に答える