我来自PHP并转移到java。我问自己(和你们)是否有办法实现这样的方式:
我正在尝试实现一个类/类来为许多数据库实体创建CRUD操作。所有实体都继承其功能(大部分来自父级) 我需要在父类 DatabaseEntity 中实现 tableName 和 idFieldName 以避免编译器警告。 似乎java尝试使用parents属性(显然为null),因为该函数是在父级中实现的。
有没有办法克服这个问题?任何反馈都非常令人沮丧!
abstract class DatabaseEntity {
protected String tableName;
protected String idFieldName;
public DataRecord readFromDB(int recordID) throws SQLException {
...
String sqlStatement = String.format("SELECT * FROM %s WHERE %s = %s", this.tableName, this.idFieldName, recordID); // Exception shows this line
...
}
}
class DatabaseRecord extends DatabaseEntity {
protected String tableName = "DatabaseRecordTable";
protected String idFieldName = "ID";
public void getRecord() {
...
DataRecord record = this.readFromDB(1); // leads to java.lang.NullPointerException: null
...
}
}
免责声明:我是github的新手,我赞成任何关于改变我的帖子的反馈意见:)
答案 0 :(得分:0)
当您使用引用readFromDB
和tableName
的方法idFieldName
时,这两个字段保留null
,只要它们未被初始化,
尝试从抽象类中删除字段并执行以下操作:
abstract class DatabaseEntity {
// protected String tableName;
// protected String idFieldName;
public abstract String getTableName();
public abstract String getIdFieldName() ;
public DataRecord readFromDB(int recordID) throws SQLException {
...
String sqlStatement = String.format("SELECT * FROM %s WHERE %s = %s",getTableName(), getIdFieldName(), recordID);
...
}
}
,实施方式如下:
class DatabaseRecord extends DatabaseEntity {
protected String tableName = "DatabaseRecordTable";
protected String idFieldName = "ID";
public void getRecord() throws SQLException {
DataRecord record = this.readFromDB(1);
}
@Override
public String getTableName() {
return this.tableName;
}
@Override
public String getIdFieldName() {
return this.idFieldName ;
}
}