访问类该类的常规Object上的变量

时间:2014-03-03 08:07:48

标签: java class object reflection

我有很多课程,例如这个:

public class DepartmentST {
    public Long id = null;
    public String name = null;
    public String comments = null;
    public Long[] profiles = null;
    public Boolean default_val = false;
}

在主类中,我创建这些类的对象并将其发送给通用方法,例如:

DepartmentST mydepartment = new DepartmentST();
generalMethod(mydepartment);

一般来说,方法我想访问对象字段(这是我的问题怎么样?)

public generalMethod(Object myObj) {
    Field[] fields = myObj.getClass().getFields();
    for(Field field : fields) {
        String fieldName = field.getName();
        // I want to access that field how can i tell myObj.fielName ?
    }
}

我是Java新手我不知道这是个愚蠢的问题。

感谢您提前提供任何帮助。

3 个答案:

答案 0 :(得分:1)

请参阅http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Field.html#get(java.lang.Object)

public generalMethod(Object myObj) {
    Field[] fields = myObj.getClass().getFields();
    for(Field field : fields) {
        String fieldName = field.getName();
        // I want to access that field how can i tell myObj.fielName ?

        Class c = field.getType();
        if (c instanceOf Integer) {
            Integer value = field.getInt (myObj);
        }

        // or

        Object value = field.get (myObj); 

    }
}

答案 1 :(得分:-1)

您需要将对象“强制转换”为DepartmentST对象:

if (myObj instanceof DepartmentST) {
    DepartmentST department = (DepartmentST) myObj;
    // continue with code

然后使用该对象而不是myObj。

答案 2 :(得分:-1)

基本上这段代码打破了封装。您需要私有字段,并通过getter和setter访问它们。反思是另一种方式(取决于具体情况)。