5

私が作成している本当に抽象的なアプリケーションの場合、パラメータータイプを知らずに、文字列形状のパラメーターのみを知っているメソッドを呼び出す必要があります。

私が方法を持っているとしましょう。

getNames(String like, int amount);

そして、2つのパラメーターを含む文字列の配列があるので、次のようにしましょう。

String[] params = new String[] {"jack", "25"};

params配列を使用してこのメ​​ソッドを取得して呼び出す方法はありますか?

4

4 に答える 4

2

あなたは試すことができます


String[] params = new String[] {"jack", "25"};
Object[] realParams = new Object[params.length];
Method[] methods = getClass().getMethods();
for (Method method : methods) {
  if (method.getParameterTypes().length == params.length) {
     for (int i = 0; i < method.getParameterTypes().length; i ++) {
        Class<?> paramClass = method.getParameterTypes()[i];
        if (paramClass = String.class) {
           realParams.add(param);
        } else if (paramClass == Integer.class || paramClass == Integer.TYPE) {
           realParams.add(Integer.parseInt(param));
        } else if (other primitive wrappers) {
            ...
        } else {
          realParams.add(null); // can't create a random object based on just string
          // you can have some object factory here, or use ObjectInputStream
        }
     }
     break; // you can continue here if the parameters weren't converted successfully,     
     //to attempt another method with the same arguments count.
  }
}
于 2009-11-18T10:13:34.570 に答える
1

メタプログラミングのように聞こえます。JVMプラットフォームを使用している場合は、Groovy/Scalaを調べることをお勧めします。

于 2009-11-18T10:09:27.527 に答える
0

JavaリフレクションAPIを調べてください。(確かに覚えていませんが)さまざまなタイプのパラメーターを確認するために必要な情報を提供できるはずです。次に、リストを繰り返し処理し、リフレクションAPIがメソッドについて教えてくれたことに基づいて、それぞれをインテリジェントにキャストする必要があります。

于 2009-11-18T10:13:05.787 に答える
-1

動的プログラミングには、動的プログラミング言語を使用します。Java は、この種のものにはあまり適していません。

とにかくリフレクション API を見てください。ただし、アプリケーションでそのようなプログラミングをたくさん行う予定がある場合は、他の代替手段を検討してください。

于 2009-11-18T12:21:15.373 に答える