実際の答えは次のとおりです。一般的に言えば、実行時に文字列を使用して変数にアクセスするべきではありません。これが実際に適切なケースはほとんどなく、説明のために簡略化された例は、それに適していません。
代わりに、単にコレクションまたは配列を使用してオブジェクトを格納してみませんか? @TRRohith は回答で例を挙げています。
それでも、 Java に適用される質問に対する直接的な回答を以下に示します。コードは C# では異なりますが、この目的で使用できる言語機能、つまりリフレクションは C# でも使用できます。
などがクラス内の静的フィールドまたはインスタンス フィールドとして宣言されている場合Obj1
、Obj2
リフレクションを使用して名前で値を取得できます ( Java の関連ドキュメントを参照)。それらがメソッドに対してローカルである場合、そうする簡単な方法はありません (これらの質問を参照してください: for Java、for C# )。
静的フィールド
class Something {
static Object obj1 = new Object();
static Object obj2 = new Object();
// etc.
}
(私は、フィールド名を小文字で開始する自由を取りました。これは、Java で受け入れられている慣行です。)
この場合、次のコードを使用して名前で変数の値を取得できます (インポートする必要がありますjava.lang.reflect.Field
)。
// Get field, named obj1, from class Something.
Field f = Something.class.getDeclaredField("obj1");
// This line allows you access the value of an inaccessible (non-public) field.
f.setAccessible(true);
// Assigning the value of the field, named obj1, to obj.
// You may want to cast to a more concrete type, if you know exactly what is stored in obj1.
// The parameter for get() is ignored for static fields, so simply pass null.
Object obj = f.get(null);
// Now you can do whatever you want with obj,
// which refers to the same object as static field obj1 of Something.
System.out.println(obj);
インスタンス フィールド
class Something {
Object obj1 = new Object();
Object obj2 = new Object();
// etc.
}
インスタンス フィールドの場合とほぼ同じ方法で行うことができます。渡すクラスのインスタンスが必要なだけですf.get()
。Something
例として、というクラスのインスタンスがあると仮定しましょうsth
。
// Let's say this is an instance of our class
Something sth = new Something();
// ...
// Get field, named obj1, from class Something.
Field f = Something.class.getDeclaredField("obj1");
// This line allows you access the value of an inaccessible (non-public) field.
f.setAccessible(true);
// Assigning the value of the field, named obj1, to obj.
// You may want to cast to a more concrete type, if you know exactly what is stored in obj1.
// The parameter for get() is the instance of Something,
// for which you want to retrieve the value of an instance field, named obj1.
Object obj = f.get(sth);
// Now you can do whatever you want with obj,
// which refers to the same object as instance field obj1 of sth.
System.out.println(obj);
ローカル変数
この場合、あなたはおそらく運が悪いでしょう。繰り返しますが、次のリンクを参照してください: Java、C#。