performActions
値が「openURL」と「closeBrowser」の配列リストがあるとします。これらの値 (openURL と closeBrowsers) とメソッドはどちらも別のクラスにあります。
performActions
arraylistから値を取得してこれらのメソッドを呼び出すにはどうすればよいですか?
具体的にはperformAction.get(0)
、「openURL」メソッドを実行する必要があります。
performActions
値が「openURL」と「closeBrowser」の配列リストがあるとします。これらの値 (openURL と closeBrowsers) とメソッドはどちらも別のクラスにあります。
performActions
arraylistから値を取得してこれらのメソッドを呼び出すにはどうすればよいですか?
具体的にはperformAction.get(0)
、「openURL」メソッドを実行する必要があります。
シンプルに保ち、文字列比較を使用してメソッドを実行します。
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
}
}
いいえ、あなたが説明したことを行う簡単な方法はありません (リフレクションを使用することはできますが、私はそれをお勧めしません)。ただし、一連の整数を格納し、それらの整数をさまざまな機能を実行するための「コード」として使用できます。これは、メソッド自体を保存することに多少似ています。
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
おそらく と で表すこと1
がcloseBrowser
でき2
ます(もちろん、任意の 2 つの整数を使用できます)。次に、これらの値を に保存しArrayList<Integer>
、その後、リストをループしてrunMethod
各値に対してメソッド like を呼び出し、それによって目的のメソッドを実行します。
編集: メソッドに引数が必要な場合は、Map
s の代わりにArrayList
s を使用して、(メソッドを表す) 整数をその引数にマッピングする同様の概念を常に採用できます。
が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);
}
私はスクリプト言語を使用します:
反射を使用します。
例: メソッド method = getClass().getMethod(yourarraylist.get(0)); method.invoke(これ);
これは、jdbc ドライバーをロードするときに行うことと似ています。
リフレクションについて読むことをお勧めします。これは役立ちます:-)