2010-01-24 108 views
17

如何设置或获取名称为动态并存储在字符串变量中的类中的字段?Java:如何通过存储在变量中的名称访问类的字段?

public class Test { 

    public String a1; 
    public String a2; 

    public Test(String key) { 
     this.key = 'found'; <--- error 
    } 

} 
+0

虽然有这样做的正确理由,但如果您正在尝试这样做,您可能会做出非常错误的事情。 – 2010-01-24 16:24:06

+0

你的代码示例很混乱。 – 2015-03-26 12:22:17

回答

29

你必须使用反射:

下面是一个处理公共领域简单案例的例子。如果可能,更好的选择是使用属性。

import java.lang.reflect.Field; 

class DataObject 
{ 
    // I don't like public fields; this is *solely* 
    // to make it easier to demonstrate 
    public String foo; 
} 

public class Test 
{ 
    public static void main(String[] args) 
     // Declaring that a method throws Exception is 
     // likewise usually a bad idea; consider the 
     // various failure cases carefully 
     throws Exception 
    { 
     Field field = DataObject.class.getField("foo"); 
     DataObject o = new DataObject(); 
     field.set(o, "new value"); 
     System.out.println(o.foo); 
    } 
} 
+0

set()问我两个参数,Object和value, 为什么不只是值?第一个参数是什么? - Field classField = this.getClass()。getField(objField.getName()); \t \t \t \t classField.set(Object,Value) – ufk 2010-01-24 13:39:56

+0

感谢该示例清除了所有内容:) – ufk 2010-01-24 13:52:23

+1

@ufk:第一个参数是要为其设置字段的对象。请注意,您通过查询类获得了Field实例 - 没有任何东西将其链接到该类的特定实例。 – 2010-01-24 13:53:54

0
Class<?> actualClass=actual.getClass(); 

Field f=actualClass.getDeclaredField("name"); 

上面的代码就足够了。

object.class.getField("foo"); 

不幸的是,上面的代码不适合我,因为类有空的字段数组。

相关问题