如何使用一个字符串值,以调用类属性

问题描述:

比方说,我有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

您可以使用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

您可以使用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

那些似乎是两个不同的类所以这个想法将无法工作。
您有一个名为Animal的类,它具有名为dog的字符串属性。现在在另一个类中创建了一个Animal类型的对象,在这种情况下,该对象被称为​​,您必须通过对象名引用其属性,因此可以为变量dogName分配对象的值,如:
String dogName=mAnimal.dog;
或者您可能想要设置该对象的属性,如:
mAnimal.dog = "Snoopy";
看来你可能会理解类和对象是如何工作的,所以我会推荐观看Java初学者的Lynda.com视频或者得到Deitel兄弟的Java如何编程。
如果这是有帮助的考虑给它一个点