我發現自己需要重寫一個靜態方法,只是因爲它最有意義,但我也知道這是不可能的。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