Java:如何在抽象类中引用子类的静态变量?

问题描述 投票:1回答:1

我理解,感谢this question,在抽象类中声明的静态字段的值在所有子类中都是相同的。

上述问题中的解决方案是在每个子类中声明一个静态字段,并在抽象类中声明一个必须由每个子类实现的抽象“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;
  }

}
java static abstract-class static-methods
1个回答
0
投票

我能够以这种方式编写代码,以最大限度地减少重复。它还消除了吸气剂的需要。

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);
  }

}
© www.soinside.com 2019 - 2024. All rights reserved.