我明白了,感谢这个问题 https://stackoverflow.com/questions/4898736/java-static-field-in-abstract-class,在抽象类中声明的静态字段的值在所有子类中都是相同的。
上述问题的解决方案是在每个子类中声明一个静态字段,并在抽象类中声明一个必须由每个子类实现的抽象“getter”实例方法。
但是我的抽象类中有一个静态方法,我需要引用子类的静态字段。我不能这样做,因为 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;
}
}
我能够以这种方式编写代码,以尽量减少重复。它还消除了对吸气剂的需要。
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);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)