私は静的メソッドをオーバーライドする必要があることに気づきました。それが最も理にかなっているという理由だけで、これが不可能であることもわかっています。
スーパークラス 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
}
}
多くの具体的な実装の 1 つ、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()
さて、正しく構築する方法はありますか?
よろしく。