2013-07-09 29 views
-1

我是Java初學者,想知道如何使用字符串來命名類的實例,然後使用該字符串/對象創建case:,同時保持完全自動化(例如使用System.in.read())?如何使用字符串動態地命名對象?

+0

更具體..問題是不夠清晰(ATLEAST我:() – stinepike

+4

動態命名變量很難,因爲它通常是一個可怕的想法,你爲什麼想這樣做? –

+0

它可能更好地存儲名稱/值對映射... – mata

回答

9

變量名稱對於程序員來說只是一種方便 - 他們甚至在您的代碼編譯完成後都沒有跟蹤。因此,不可能像這樣動態地命名變量。你可以嘗試使用Map模仿這一點,但是:

Map<String, MyClass> map = new HashMap<String, MyClass>(); 
map.put("xyz", new MyClass()); // or something like that 

... 

現在,你可以通過引用與map.get("xyz")字符串"xyz"關聯的對象。

+0

對不起,這是一個愚蠢的問題,其中我現在有答案,出於不便! – Cartier

+0

@ user2565202唯一的一個愚蠢的問題是一個不問的問題:-)無論如何,不​​要忘記[接受答案](http ://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)。 – arshajii

0

雖然這是一個非常糟糕的主意(使用某種形式的hashmap代替),但可以使用名爲reflection的塗料。我個人做不是推薦這個。

假設您的班級名爲Foo並且包含字段barbaz

現在,讓我們說我們在類Foo,所以我們可以使用this關鍵字。如果使用對該對象的現有引用,請將其更改爲thisfName是我們想要的變量的名稱。

Class<?> c = this.getClass(); 
Field ourField = c.getDeclaredField("fName"); 
Object ourValue = ourField.get(this); 

請注意,這是痛苦的,緩慢的,並且需要額外的工作才能訪問原語。

如果ourFieldint,例如,我們將要改變的最後一個值:

int intVal=ourField.getInt(this); 
相關問題