2013-03-05 27 views
0

有什麼方法根據用戶輸入創建對象的名稱?使用掃描儀創建對象標識符?

例如。

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

如果你不知道名稱,你打算如何使用它? – 2013-03-05 11:04:22

+0

簡單地說:號 你想通過這樣做到什麼?如果對象名稱與用戶相關,則該名稱也可以是對象的屬性。 – 2013-03-05 11:04:26

+0

我認爲@cowls的答案,是你的問題的答案 – 2013-03-05 11:11:17

回答

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

感謝您的幫助 – 2013-03-05 12:32:12

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(); ,不可能,只要我knwo – 2013-03-05 11:12:06

0

鑑於線

Type variable_name = expression ; 

名稱variable_name在範圍的其餘部分被簡單地用於參照表達的結果。你知道Java是一種編譯語言,這些名字只對程序員有用。一旦編譯器完成了它的工作,它就可以使用一個轉換表並用它想要的任何ID替換這些名稱。

由於這些名字甚至都不在運行時存在,有沒有在運行時的變量選擇名字的方式。

但是您可能需要訪問這取決於用戶輸入的物體(例如像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)); 
    } 

}