0

我有一个记录类。在这个 Record 类中,我有一个将数据保存到数据库的 save() 方法。我有几个其他类扩展了这个 Record 类,例如 Person 类。在我的 Person 类中,我想为 People 数据库表定义数据库表名和列。我想让这些最终的静态属性成为 Person 的所有实例都引用的。我如何让扩展类 Record 知道该属性将存在于所有扩展类中?如何为基类知道存在的类定义静态属性?

这是对接口的适当使用吗?

public class Record {
    protected String table_name;
    protected String[] table_columns;

    private void save(){
        //save data based on table_name and table_columns;
    }
}

public class Person extends Record{
    protected final static String table_name = "People";
    protected final static String[] table_columns = {"_id","name"}
}
4

2 回答 2

2

我认为实现您的要求的一个好方法是做这样的事情:(我认为 Record 应该是抽象的)

public abstract class Record {
    protected abstract String getTableName();
    protected abstract String[] getTableColumns();

    private void save(){
        String table_name = getTableName();
        String[] table_columns = getTableColumns();
        //save data based on table_name and table_columns;
    }
}

public class Person extends Record{
    protected final static String table_name = "People";
    protected final static String[] table_columns = {"_id","name"}

    protected String getTableName(){
         return table_name;
    }

    protected String[] getTableColumns(){
        return table_columns;
    }
}
于 2013-04-17T01:43:33.473 回答
2

为什么需要static final

如果您进行Record抽象并将表名和表列更改为抽象方法,您将需要在子类中实现它们(并Record确保它们的存在)。

我不确定为什么实例Person需要访问此信息,但如果有必要,它仍然是可能的。

public abstract class Record {
  protected abstract String getTableName();
  protected abstract String[] getTableColumns();

  private void save(){
    //save data based on getTableName() and getTableColumns();
  }
}

public class Person extends Record {
  protected String getTableName() {
    return "People";
  }
  protected String[] getTableColumns() {
    return new String[] { "_id", "name" };
  }
}
于 2013-04-17T01:37:10.727 回答