2014-11-03 72 views
0

比方說,我有Java類:如何使用一個字符串值,以調用類屬性

public class Animal 
{ 
    public String dog = "Rex"; 
} 

在另一類我做這樣的:

Animal mAnimal = new Animal(); 
String attributeCaller = "dog"; 

問題:如何通過在Java中使用String「attributeCaller」值調用mAnimal屬性「dog」?我的意思是做這樣的事情:

String dogName = mAnimal.attributeCaller; 

它只是應該等於(方便調用Java的屬性的方式):

String dogName = mAnimal.dog; 
+4

不知道你到底在問什麼? – brso05 2014-11-03 13:33:01

+0

我沒有得到它 – Michael 2014-11-03 13:34:56

回答

2

您可以使用Java反射API做到這一點:http://docs.oracle.com/javase/tutorial/reflect/。但是,除非真的有必要,否則我不會推薦使用反射。

+2

+1的建議,但我建議反對也,反射用法不應該修復糟糕的設計... – 2014-11-03 13:39:30

+0

PS:反射是緩慢的! http://stackoverflow.com/questions/435553/java-reflection-performance – 2014-11-03 13:54:11

1

您可以使用java反射API來檢查任何對象的內容並實現它。 下面是一個例子:

String attributeCaller = "dog"; 
Animal mAnimal = new Animal(); 
Class<?> c = mAnimal.getClass(); 

Field f = c.getDeclaredField(attributeCaller); 
f.setAccessible(true); 

String dogName = (String) f.get(mAnimal); 

請注意,這不適用於超領域的工作,得到超領域你必須通過c.getSuperclass()迭代來查找字段

+0

謝謝你的回答,它的工作:) – user2999943 2014-11-03 13:51:36

0

那些似乎是兩個不同的類所以這個想法將無法工作。
您有一個名爲Animal的類,它具有名爲dog的字符串屬性。現在在另一個類中創建了一個Animal類型的對象,在這種情況下,該對象被稱爲​​,您必須通過對象名引用其屬性,因此可以爲變量dogName分配對象的值,如:
String dogName=mAnimal.dog;
或者您可能想要設置該對象的屬性,如:
mAnimal.dog = "Snoopy";
看來你可能會理解類和對象是如何工作的,所以我會推薦觀看Java初學者的Lynda.com視頻或者得到Deitel兄弟的Java如何編程。
如果這是有幫助的考慮給它一個點

相關問題