我发现自己需要覆盖一个静态方法,因为这是最合理的,但我知道这是不可能的。
超类Entity.java:
abstract public class Entity<T> {
public Entity() {
//set up database connection
}
abstract public static Map<Object, T> getAll();
abstract public void insert();
abstract public void update();
protected void getData(final String query) {
//get data via database
}
protected void executeQuery(final String query) {
//execute sql query on database
}
}
其中一个具体实现是Account.java:
public class Account extends Entity<Account> {
private final static String ALL_QUERY = "SELECT * FROM accounts";
private final static String INSERT_QUERY = "INSERT INTO accounts (username, password) VALUES(?, ?)";
private final static String UPDATE_QUERY = "UPDATE accounts SET password=? WHERE username=?";
private String username;
private String password;
public Account(final String username, final String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(final String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(final String password) {
this.password = password;
}
@Override
public static Map<Object, Account> getAll() {
//return a map using the ALL_QUERY string, calls getData(string);
}
@Override
public void insert() {
//insert this using INSERT_QUERY, calls executeQuery(string);
}
@Override
public void update() {
//update this using UPDATE_QUERY, calls executeQuery(string);
}
}
我并没有详细解释代码,但是对它的任何一般反馈也将不胜感激,希望注释足够说明问题。
基本上,我认为我们都可以同意使用Account.getAll()
比使用new Account().getAll()
更有意义(如果我要为其引入一个虚拟语法)。
然而,我确实想让它扩展Entity
类,目前仅出于方便考虑,但以后我可能需要使用Entity
的集合/列表/多重集,并对它们执行update()
操作,例如,如果我要构建一个每分钟执行所有更新的队列。
所以,有没有一种正确构造getAll()
的方法呢?
敬礼。
@Override
,就可以了。另请参见:https://dev59.com/cEbRa4cB1Zd3GeqP1ZDf - Matt Ball