2011-10-21 32 views
1

我想打印了一份聲明,如下所示:Java:強制字符串名稱被接受爲一個類?

Object SomeObject = new Object("object's name"); 
System.out.println(SomeObject.name); 

除了不指定在打印語句中的對象的名稱,指定將前面已宣佈爲現有對象的名稱的字符串。

例子:

Object SomeObject = new Object("object's name"); 
String object_string = "SomeObject"; 
System.out.println("object_string.name"); 

我知道的第一個例子會打印出「對象的名字」。我想第二個做同樣的事情,但使用字符串。請注意,該字符串的值與對象名稱相同。顯然,第二個例子不起作用,因爲object_string是一個字符串,而不是一個對象。

所以我的問題是,我可以強制打印語句接受「object_string」作爲一個對象的名稱?

System.out.println("(Object)object_string.name"); 

也許這樣的事情?

感謝

+1

我真的不明白你在問什麼。你知道Class.forName()嗎? –

+0

Class.forName()究竟是什麼? – Blackvein

+0

它允許您根據字符串名稱檢索類。我不知道它是否會對你有所幫助。 –

回答

1

什麼你正在尋找被稱爲字符串插值(至少這就是它被稱爲在Perl,這是我最熟悉的例子)和Java沒有它,對不起。但是,有一些基於Java的工具可以在更專用的用例中提供類似的功能。例如,您可能對JSP EL,OGNLSpring EL感興趣。

但是,請注意,所有這些都需要一些腳手架來設置,特別是您在這些動態環境中引用的對象必須首先放入某種地圖或其他持有者中。沒有辦法直接從局部變量引用它們。

另一方面,像Groovy這樣的其他語言提供了這個內置的功能。

0

你不能從字符串去命名變量名,object_string當編譯成字節碼,也沒有辦法讓編譯器知道「object_string」引用變量object_string變量將不再存在。當然,除非你有一個字符串映射到你控制的變量。

您最好使用反射來查找屬性「名稱」並打印該屬性。

public void printProperty(Class<?> cl, String propertyName) { 
    //Use reflection here to look up the propertyName on class cl and print 
} 

printProperty(Object.class, 'name'); 
相關問題