Я понимаю, благодаря этому вопросу , что значение статического поля, объявленного в абстрактном классе, будет одинаковым для всех подклассов.
Решение в вышеупомянутом вопросе состоит в том, чтобы объявить статическое поле в каждом подклассе и абстрактный метод экземпляра "getter" в абстрактном классе, который должен быть реализован каждым подклассом.
Но у меня есть статический метод в моем абстрактном классе, и мне нужно сослаться на статическое поле подкласса. Я не могу этого сделать, потому что метод получения является методом экземпляра.
Какое лучшее решение здесь? Я бы предпочел не помещать почти идентичные экземпляры getAll
в каждый подкласс.
public abstract class AbstractModel {
public abstract String getTableName();
public static ResultSet getAll() {
Statement stmt = Database.get().conn.createStatement();
// Error below: Cannot use "this" in static context.
String query = "SELECT * FROM `" + this.getTableName() + "`";
return stmt.executeQuery(query);
}
}
public class Api extends AbstractModel {
protected static final String TABLE_NAME = "apis";
@Override
public String getTableName() {
return TABLE_NAME;
}
}