4

私が Java から Python に移行するのにかなりの月日がかかりました。ここで、制約を投影するために Java に戻ります。今、私は、関数自体の中で関数のすべてのパラメータ (値を含む) をプログラムで取得する方法があるかどうか疑問に思っています。

このようなもの

public void foo(String arg1,String arg2, Integer arg3){
... pars = ...getpars();  
}

foo("abc","dfg",123);

whereはwithペアgetpars()を返す必要があります。HashMapname,value

だから例から

arg1,"abc"
arg2,"dfg"
arg3,123

このようなものはありますか?

4

5 に答える 5

2

残念ながら、これは不可能です。できることは、 を使用して特定のメソッドのパラメータ タイプのリストを取得することだけですreflection

しかし、メソッド自体に渡された各引数のname->でマップを取得する方法はありません。value

于 2013-06-06T08:24:57.650 に答える
2

パラメータの名前を取得することはできません。これは値ではなく単なる名前であるためです。マップにパラメーターの名前を付けたい場合は、パラメーター名と一致する文字列を定義して入れます。

この同様の質問を読んでください。受け入れられた回答には、サードパーティのライブラリを使用した解決策があるようです。

于 2013-06-06T08:25:44.933 に答える
1

パラメータの名前を動的に取得することも、変数名を使用する以外の方法で値を見つけることもできません。しかし、JAVA には次善の策があります: 可変引数です。動的な数の引数が必要な場合は、次のようにメソッドを宣言できます。

public void foo(Object... args)

メソッドを呼び出すときは、任意の数の引数を指定して呼び出します。foo(1, 2, "ABC")およびfoo(new File("config.dat"), new Scanner(), 88.5D)両方とも有効な呼び出しです。関数内では、argsすべてのパラメーターを順番に含む配列になります。

ただし、いくつかの使用上のヒントがあります。上記のメソッド宣言は、一般に、適切な形式とは見なされません。通常は、より具体的にすることができます。この柔軟性がすべて必要かどうかをよく考えて、オーバーロードされたメソッドをいくつか使用するか、HashMap代わりに a を関数に渡すことを検討してください。その広い意味で動的パラメータが実際に必要になることはほとんどありません。

于 2013-06-06T08:30:20.160 に答える
1

あなたが使用することができます:

void foo(String... args) {
    for (String arg: args) { }
    for (int i = 0; i < args.length - 1; i += 2) {
        map.put(args[i], args[i + 1];
    }
}

foo("a", "1", "b", "2");

または Map ビルダーを使用します。 builder-for-hashmap を参照してください。

于 2013-06-06T08:34:49.820 に答える