抽象和静态有用的情况。我该如何解决?

A case where abstract and static would be usefull. How can I solve it?

我想要一个抽象助手 class,我在其中实例化我在助手子 class 中需要的 classes。在摘要 class 中,有一个方法对所有子 class 都是通用的,但它对于每个子 class 都有细微的差别,因此必须临时实现。 因为,一般来说,helper-class 只有静态方法最好有一个抽象的静态方法,这样它在所有子 class 中都必须是 present/implemented 并且它可以称为辅助方法。但众所周知,这是不可能的...

这是我的具体例子:

public abstract class ClientHelper
{
  protected static A a= new A();
  protected static B b= new B();
  ...

  abstract static public String getX( String id );
}

public static class UserType1ClientHelper extends ClientHelper
{
  @Override
  public String getX( String id )
  {
    return a.getX(id, SPECIFIC_PARAMETER_FOR_USERTYPE1)
  }
  ...
}

public static class UserType2ClientHelper extends ClientHelper
{
  @Override
  public String getX( String id )
  {
    return b.getX(id, SPECIFIC_PARAMETER_FOR_USERTYPE2)
  }
  ...
}

如何以 "possible" 方式重现此内容?

As, generally, an helper-class only has static methods what it would be nice to have is an abstract static method

Helper class 具有静态方法很好,但如果您没有实现它,该方法将如何有用地出现在 Helper class 中,如 abstract方法。

我知道,您喜欢使用 ClientHelper 类型引用为所有派生的 classes 调用该方法。由于该方法是抽象的,派生 class 必须为其提供实现,使其成为 non-static 即删除静态并将其用作实例方法。

因为基 class 需要知道 classes A 和 B,你可以这样做:

enum ClientHelper {
    USER_TYPE_1(new A()),
    USER_TYPE_2(new B());

    private ClientHelper(... obj) {
    }

    public String getX(String id) {
        ...
    }

}

and/or

enum ClientHelper {
    USER_TYPE_1() {
        A a = new A();

        @Override
        public String getX(String id) {
             ...
        }
    },
    USER_TYPE_2() {
        ...
    };

    public abstract String getX(String id);

}

String x = ClientHelper.USER_TYPE2.getX("H");

后者更冗长,但允许更多变化。

它利用每个枚举值都是一个静态实例。