2013-03-05 2 views
0

Есть ли способ создать имя объекта в зависимости от ввода пользователем?Использование сканера для создания идентификатора объекта?

например.

Object scan.nextLine() = new Object(); 
+0

Если вы не знаете названия, как вы собираетесь его использовать? –

+0

Проще говоря: № Что вы хотите достичь, сделав это? Если имя объекта имеет отношение к пользователю, это имя также может быть свойством объекта. –

+0

Я думаю, что ответ by @cowls - это ответ на ваш вопрос –

ответ

1

Нет это не представляется возможным. В 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 
+0

Спасибо за вашу помощь –

0

Нет. Вы не можете сделать это в java. Поскольку у вас уже должен быть класс, определенный для создания его объекта.

1

Нет, вы не можете этого сделать.

я предложил бы иметь собственный класс и хранить Имя_экземпляр:

public class MyClass { 

    private String instanceName; 
    public MyClass(String instanceName) { 
     this.instanceName = instanceName; 
    } 

} 

MyClass myObj = new MyClass(scan.nextLine()); 
0

Есть несколько способов, вы могли бы подделке делать это. Вы можете использовать карту для восприятия динамически названных объектов. Но поскольку вы говорите, что вы новичок, короткий ответ - нет. Убедитесь, что вы знаете, что вы просите в своем примере. Ваш пример является эквивалентом говоря:

String line = "foo"; 
Object line = new Object(); 

Мое предположение было бы, что это не то, что вы хотите (и не представляется возможным).

+0

Я думаю, он хочет, Object foo = new Object(); , невозможно, насколько я знаю –

0

Учитывая линии

Type variable_name = expression ; 

Название variable_name просто используется в остальной части рамки для ссылок на результат выражения. Вы знаете, что Java - это скомпилированный язык, и эти имена полезны только программисту. Как только компилятор выполнит свою работу, он может использовать таблицу трансляции и заменять эти имена любым желаемым идентификатором.

Поскольку это имя даже не существует во время выполнения, нет способа выбрать имя переменной во время выполнения.

Однако вам может потребоваться доступ к объекту в зависимости от ввода пользователя (например, как переменные переменных PHP $$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)); 
    } 

} 
Смежные вопросы