我发现自己有必要重写静态方法,仅因为它最有意义,但我也知道这是不可能的。

父类(super class)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()

问候。

最佳答案

您可以对所有元素使用单独的类进行操作:

abstract public class Collection<T extends Entity<T>> {
    abstract public static List<T> getAll();
    public void printAll() {
        // Print all entries of List obtained from getAll()
    }
}

您可以将其用作:
public class Accounts extends Collection<Account> {
    @Override
    public List<Account> getAll() {
        //return a list using the ALL_QUERY string, calls getData(string);
    }
}

10-05 23:55