次のように、整数変数の名前を含む文字列があります。
int branchControlFlow1 = 2;
String branchField = "branchControlFlow1";
変数の名前を含む文字列 (branchField) を使用して、変数 branchControlFlow1 の値にアクセスできますか?
変数「branchControlFlow1」は必ず整数型でなければなりません。
ご協力いただきありがとうございます!
リフレクションを使用して名前でフィールドを検索できます。
ただし、これを試みる場合は、マップが最適な選択である可能性が高くなります。
Map<String, Integer> map = ...
map.put("branchControlFlow1", 2);
int num = map.get("branchControlFlow1");
代わりに、整数のマップ/配列リストを実際に使用する必要があります。マップは値へのキー (文字列または任意のオブジェクト) であり、リスト (配列リストまたはリンクされたリスト) は int->Entry です。
そうでない場合は、ダーク マジックリフレクションに頼る必要があります。以下、この魔術について説明します。私は、頭痛、吐き気、感電、窒息、溺死、1600 年代の議員による強制溺死、例外、損害、偶発的または結果的、またはその他の問題について責任を負いません。
さらに深刻なことに、頻繁に呼び出されたり、タイム クリティカルなコードで呼び出されたりすると、パフォーマンスが大幅に低下します。必要なたびに値を取得するのではなく、取得した値を割り当てることで反射を最小限に抑えます。
まず、クラス オブジェクトのインスタンスを取得します。フィールドが というクラスにある場合はFooClass
、次を使用します。
Class clazz=FooClass.class;
Field fd=clazz.getField(name);
int val=fd.getInt(myObjectOfFooClass);
スタック上のローカル変数に対してこれを行うことはできません。