是否可以从java中的对象中删除属性(变量)?

时间:2014-06-02 10:41:09

标签: java object reflection attributes

我有很多从一个类扩展的类

我还有一个方法,它的参数是父类,并根据这些类的属性创建查询。

有时我需要忽略结果查询中的某些属性。

那么可以删除对象的某些属性吗?

class A1 extends Model {
    public String field1 = "";
    public String field2 = "";

    public String table = "A1";

    @Override
    public String getTable() {
        return this.table;
    }
}

class A2 extends Model {
    public String field1 = "";
    public String field2 = "";
    public String field3 = "";

    public String table = "A2";

    @Override
    public String getTable() {
        return this.table;
    }
}

class Utility {
    public static String query(Model params) {
        Field[] fields = params.getClass().getFields();
        String head = "INSERT INTO " + params.getTable() + "(";
        String tail = "VALUES (";
        for(Field field : fields) {
            String key = field.getName();
            String val;
            try {
                val = field.get(params);
            } catch (Exception e) {
                val = null;
            }
            head += key + ",";
            tail += "'" + val + "',";
        }
        head = head.substring(head,0,head.length() -1) + ")";
        tail = tail.substring(tail,0,tail.length() -1) + ")";
        return head + tail;
    }
}

我通过发送一个模型来调用查询方法

A1 data = new A1();
data.field1 = "Name";
data.field2 = "Family";
String query = Utility.query(data);

我只是想从查询中删除field2我该怎么做?

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

您可以实施注释。我们称之为@DontPersist。用它来标记不应该持久化的字段。在Utility.query()中,您可以使用反射检查注释。

答案 1 :(得分:0)

由于您的Model类没有实现任何东西(它可能是一个接口,但这是另一个主题),您可以扩展它,在必要时创建一个具有较少属性的类(匿名类将完成工作)。

无论如何,我认为你应该重构代码:为什么不使用List来存储字段?它更容易,也不需要反思。

我会使用类似的东西:

public class Model extends ArrayList{

    public Model(String name) { tableName=name;}

    private String tableName;

    public String getTable() {return tableName}


}

然后您可以迭代数组以获取字段名称。