Java: 如何在抽象class中引用subclass的静态变量?
Java: How to refer to subclass's static variable in abstract class?
我了解到,感谢 this question,在抽象 class 中声明的静态字段的值在所有子 class 中都是相同的。
上述问题的解决方法是在每个子class中声明一个静态字段,并在抽象class中声明一个抽象"getter"实例方法,每个子都必须实现子class.
但是我的abstract里面有一个static方法class,需要引用subclass的static字段。我不能这样做,因为 getter 是一个实例方法。
最好的解决方案是什么?我宁愿不在每个子 class.
中放置几乎相同的 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;
}
}
我能够以这种方式编写代码,以尽量减少重复。它还消除了对 getter.
的需要
public abstract class AbstractModel {
public static ResultSet getAllFromTable(String tableName) {
Statement stmt = Database.get().conn.createStatement();
String query = "SELECT * FROM `" + tableName + "`";
return stmt.executeQuery(query);
}
}
public class Api extends AbstractModel {
protected static final String TABLE_NAME = "apis";
public static ResultSet getAll() {
return getAllFromTable(TABLE_NAME);
}
}
我了解到,感谢 this question,在抽象 class 中声明的静态字段的值在所有子 class 中都是相同的。
上述问题的解决方法是在每个子class中声明一个静态字段,并在抽象class中声明一个抽象"getter"实例方法,每个子都必须实现子class.
但是我的abstract里面有一个static方法class,需要引用subclass的static字段。我不能这样做,因为 getter 是一个实例方法。
最好的解决方案是什么?我宁愿不在每个子 class.
中放置几乎相同的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;
}
}
我能够以这种方式编写代码,以尽量减少重复。它还消除了对 getter.
的需要public abstract class AbstractModel {
public static ResultSet getAllFromTable(String tableName) {
Statement stmt = Database.get().conn.createStatement();
String query = "SELECT * FROM `" + tableName + "`";
return stmt.executeQuery(query);
}
}
public class Api extends AbstractModel {
protected static final String TABLE_NAME = "apis";
public static ResultSet getAll() {
return getAllFromTable(TABLE_NAME);
}
}