Java 在这种情况下,抽象和静态将是有用的。我怎样才能解决它?

Java 在这种情况下,抽象和静态将是有用的。我怎样才能解决它?,java,abstract-class,static-methods,Java,Abstract Class,Static Methods,我希望有一个抽象的helper类,在这个类中实例化我在helper子类中需要的类。在抽象类中,有一个方法对于所有子类都是通用的,但是它对于每个子类都有一个细微的区别,因此必须特别实现。 通常,一个helper类只有静态方法,最好有一个抽象的静态方法,这样它必须在所有子类中都存在/实现,并且可以作为helper方法调用。但我们都知道这是不可能的 以下是我的具体例子: public abstract class ClientHelper { protected static A a= new A

我希望有一个抽象的helper类,在这个类中实例化我在helper子类中需要的类。在抽象类中,有一个方法对于所有子类都是通用的,但是它对于每个子类都有一个细微的区别,因此必须特别实现。 通常,一个helper类只有静态方法,最好有一个抽象的静态方法,这样它必须在所有子类中都存在/实现,并且可以作为helper方法调用。但我们都知道这是不可能的

以下是我的具体例子:

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)
  }
  ...
}
我如何以“可能”的方式复制这一点

通常情况下,帮助器类只有静态方法 是一种抽象的静态方法

具有静态方法的Helper类是可以的,但若您并没有实现它,那个么在Helper类中作为
abstract
method存在该方法将如何发挥作用


我理解,您喜欢使用
ClientHelper
类型引用为所有派生类调用该方法。由于该方法是抽象的,并且派生类必须为其提供实现,因此将其设置为非静态的,即删除静态的,并将其用作实例方法。

由于基类需要了解类A和B,您可以执行以下操作:

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

    private ClientHelper(... obj) {
    }

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

}
和/或

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");
后者更详细,但允许更多的差异


它使用的是每个枚举值都是静态实例。

只是不要使用静态实例。依赖项注入可以帮助您将引用分发到辅助对象。虽然在本例中,我首先会质疑是否需要多个帮助器类。但随后我必须实例化该类。。。我主要关心的不是通过使用
ClientHelper
为所有派生类调用该方法,而是强制所有子类实现该方法,并在不实例化子类的情况下对其进行处理。@Francesco实例化一个类有什么错?@biziclop没有错,但是我想要一个helper类,通常它们只有
public
static
方法。。。