ユーザー入力に応じてオブジェクトの名前を作成する方法はありますか?
例えば。
Object scan.nextLine() = new Object();
ユーザー入力に応じてオブジェクトの名前を作成する方法はありますか?
例えば。
Object scan.nextLine() = new Object();
いいえ、これはできません。
カスタム クラスを用意して、instanceName を保存することをお勧めします。
public class MyClass {
private String instanceName;
public MyClass(String instanceName) {
this.instanceName = instanceName;
}
}
MyClass myObj = new MyClass(scan.nextLine());
いいえ、できません。Java には動的変数はありません。Java 変数名は、コンパイル時にソース コードで宣言する必要があります。
ユーザーが入力した値でオブジェクトを保存したい場合は、以下のように を使用しMap
てデータを保存してみてください。
Map<String, Object> objects = new HashMap<String, Object>();
String name = scan.nextLine();
Object obj = new Object();
objects.put(name, obj); // saving the objects in Map
行を考えると
Type variable_name = expression ;
名前は、式variable_name
の結果を参照するためにスコープの残りの部分で使用されます。Java はコンパイル済み言語であり、これらの名前はプログラマーにとってのみ有用であることをご存知でしょう。コンパイラがその仕事を終えると、変換テーブルを使用して、それらの名前を必要な ID に置き換えることができます。
これらの名前は実行時には存在しないため、実行時に変数の名前を選択する方法はありません。
ただし、ユーザー入力に応じてオブジェクトにアクセスする必要がある場合があります (たとえば、PHP の変数 variable など$$a_var
)。コンテキストに応じて、リフレクションを使用してインスタンス メンバーにアクセスするか、単純なMap<String, Object>
. リフレクションの例:
public class VariableRuntime {
static class Person {
public String first, last, city;
}
public static void main(String[] args) throws Exception {
Person homer = new Person();
homer.first = "Homer";
homer.last = "Simpson";
homer.city = "Springfield";
System.out.println("What do you want to know about Homer? [first/last/city]");
String what = new Scanner(System.in).nextLine();
Field field = Person.class.getDeclaredField(what);
System.out.println(field.get(homer));
}
}
と同じMap<String, String>
:
public class VariableRuntime {
public static void main(String[] args) throws Exception {
Map<String, String> homer = new HashMap<String, String>();
homer.put("first", "Homer");
homer.put("last", "Simpson");
homer.put("city", "Springfield");
System.out.println("What do you want to know about Homer? [first/last/city]");
String what = new Scanner(System.in).nextLine();
System.out.println(homer.get(what));
}
}
これを偽装する方法がいくつかあります。マップを使用して、動的に名前が付けられたオブジェクトの認識を与えることができます。しかし、あなたは初心者だと言うので、短い答えはノーです。ただし、例で何を求めているかを確認してください。あなたの例は、次のように言うのと同じです:
String line = "foo";
Object line = new Object();
私の推測では、それはあなたが望んでいたものではありません (そして不可能です)。
いいえ、Java ではできません。そのオブジェクトを作成するためのクラスがすでに定義されている必要があるためです。