0

私はJavaにかなり慣れていないので、皆さんの1人がこれを行う方法を知っていることを望んでいます。アプリケーションの外部にあるメソッドに渡される引数のタイプと値の両方を、XMLのような方法でユーザーに指定させています。

例:javac myAppsName externalJavaClassmethodofExternalClass[パラメーター]

もちろん、適切なメソッドを見つけるには、メソッドがオーバーロードされる可能性があるため、適切なパラメータータイプを用意する必要があります。これが、異なるバージョン間の違いを判断する唯一の方法です。現在、パラメータは次のようにフォーマットされています。

(type)value(/ type)、例:(int)71(/ int)(string)これは、パラメーターとして渡す私の文字列です!(/ string)

私はそれらを解析し、示されたタイプのコンストラクターを取得してから、そのメソッドを実行してそのコンストラクターを実行しnewInstance(<String value>)、新しいインスタンスをにロードしますObject。これは問題なく機能しますが、ご存知のとおり、一部のメソッドは配列、さらには多次元配列を使用します。

私は次のように引数のフォーマットを処理することができます:...(array)(array)(int)0(/int)(int)1(/int)(/array)(array)(int)2(/int)(int)3(/int)(/array)(/array)またはおそらくもっと良い...。{{(int)0(/int)(int)1(/int)}{(int)2(/int)(int)3(/int)}}

問題は、これをどのように実装できるかということです。プリミティブなどをargObj[0]として処理できるように、すべてをObject []配列でラップし始める必要がありますが、通常どおりに配列をロードしますか?(残念ながら、2次元配列をサポートしたい場合は、Object [] []配列にする必要があります。この実装はあまりきれいではありません。)

4

3 に答える 3

3

はい、あります、そしてそれはと呼ばれjava.lang.Objectます。int[][]として宣言された変数のように配列を割り当てることもできますjava.lang.Object

しかし、私はそれがあなたが望んでいたものではないことを恐れています。クライアントサービスフレームワークを作成しているようです。クライアント(ユーザー)がサービス(アプリ)にデータを渡します。同じことを実行できる既存のライブラリがあります。たとえば、Thrift、Protobufなどです。XMLベースのソリューションを探しているなら、SOAPがあります。

于 2012-06-05T02:49:12.303 に答える
3

あなたが本当に探しているのはJSONであり、それを処理するためのJavaキットの1つです。

于 2012-06-05T02:54:34.820 に答える
1

ここで探しているのは、XMLファイル内に記述された属性に基づいてJavaメソッドを動的に呼び出す方法だと思います。

その場合は、JavaReflectionAPIを調べることができます。

クラスの例:

package foo;
public class Bar {

    public void doSomething(String x) {
        System.out.println("This is a method doSomething that takes in a String parameter");
    }

    public void doSomething(String [] arr, String str) {
        System.out.println("This is a method doSomething that takes in a String arr parameter and a String parameter");
    }
}

このクラスのメソッドを動的に使用するには、次のようにします。

Class c = Class.forName("foo.Bar");
Object newInstance = c.newInstance();
Method method = c.getMethod("doSomething", String.class);
// This will locate the first method
method.invoke(newInstance, "Hello World");

Method method = c.getMethod("doSomething", String[].class, String.class);
// This will locate the second method

String [] arr = {"Hello", "World"};
method.invoke(newInstance, arr, "Hello World");

したがって、XMLファイルで次のように指定できます。

<method>
    <name>doSomething</name>
    <params>
        <param>java.lang.String</param>
    </params>
</method>
<method>
    <name>doSomething</name>
    <params>
        <param>java.lang.String[]</param>   // or any other annotation to indicate that its an arr
        <param>java.lang.String</param>
    </params>
</method>

次に、XMLファイルを読み取り、それを使用してJavaメソッドを動的に検索します。

配列を動的に作成するには:

Class c = Class.forName("java.lang.String");
int length = 5;
Object o = Array.newInstance(c, length); // o is a String arr of length 5
String [] arr = (String []) o;
于 2012-06-05T04:12:54.377 に答える