编译我已经定义的具有单个方法的基类的子类时出现问题,并且每个子类都实现了抽象基本方法,但是javac说它们不会完全没有,即使它是相当的在子类中明确定义。
DbModel.java(基类)
package com.manodestra.csa.db.model.configNew;
import com.manodestra.db.DbModel;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Time;
import java.sql.Timestamp;
public class MenuPermissions extends DbModel<MenuPermissions> {
private final String menuId;
private final String userLevel;
public MenuPermissions(
String menuId,
String userLevel
) {
this.menuId = menuId;
this.userLevel = userLevel;
}
public String getMenuId() {
return this.menuId;
}
public String getUserLevel() {
return this.userLevel;
}
public MenuPermissions newInstance(ResultSet rs) throws SQLException {
return new MenuPermissions(
rs.getString("menu_id"),
rs.getString("user_level")
);
}
}
DbModel扩展了Model,它只有一个通用的toString方法。
MenuPermissions.java(子类)
[javac] Compiling 487 source files to C:\Media\Code\manodestra_java\bin
[javac] C:\Media\Code\manodestra_java\src\com\manodestra\csa\db\model\configNew\MenuPermissions.java:10:
error: MenuPermissions is not abstract
and does not override abstract method newInstance(ResultSet) in DbModel
[javac] public class MenuPermissions extends DbModel<MenuPermissions> {
[javac] ^
编译错误
{{1}}
有人看到这里的问题是什么?我猜我忽略了一些非常简单的东西。
有关要求的进一步信息:
我正在构建一个从给定数据库生成模型对象的实体框架。上面的MenuPermissions是一个这样的模型对象(由我编写的一个名为GenerateModel的类自动生成)。我希望每个模型都有一个方法,允许我根据结果集获取每个目标类型的新实例,该结果集将相应地填充对象并返回它。理想情况下,它应该是一个静态方法,但我现在已经尝试将它作为一种具体方法,因为我需要在DbModel的每个子类中强制它的存在。希望这是有道理的。
答案 0 :(得分:6)
您的抽象方法newInstance
具有包访问权限,我不知道是否有意,但如果它位于不同的包中,则会出现错误。
编辑:
因此,父类中的抽象方法无法解析,因为它未声明为public
。可能的补救措施是将public
添加到方法定义中,或将子类移动到与父类相同的包中:-D