我发现自己需要重写一个静态方法,只是因为它最有意义,但我也知道这是不可能的。Java重写静态方法
超类,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',就可以了。另见:http://stackoverflow.com/q/548861/139010 – 2013-05-13 19:52:23
谢谢你使用我的建议。不标记你使用的正确答案可能会引起其他人对你最初的问题的关注。 – christopher 2013-05-13 19:52:33
@MattBall实施明智,确实很好。但我宁愿有一些更严格的限制,这就是我在界面中首先提到它的原因。 @ChrisCooney可能这有点滞后,因为我确实记得它是正确的,我希望我已经正确地使用了你的建议,尤其是使用泛型参数'Entity' –
skiwi
2013-05-13 19:55:26