我想有一个抽象的帮助器类,我在helper-sub-classes中实例化我需要的类。在抽象类中,有一个对所有子类都通用的方法,但它与每个子类有特定的差别,因此必须是临时实现的。 通常,辅助类只有静态方法,它是一个抽象的静态方法,因此它必须在所有子类中存在/实现,并且可以作为辅助方法调用。但是我们都知道这是不可能的......
这是我的具体例子:
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)
}
...
}
如何以“可能的”方式重现这一点?
答案 0 :(得分:1)
通常,辅助类只有静态方法 很高兴有一个抽象的静态方法
使用静态方法的Helper类很好,但如果你没有实现它,那么该方法如何作为abstract
方法在Helper类中有用。
我理解,您希望使用ClientHelper
类型引用为所有派生类调用该方法。由于该方法是抽象的,并且派生类必须为它提供实现,因此将其设为non-static
,即删除静态并将其用作实例方法。
答案 1 :(得分:1)
由于基类需要知道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");
后者更冗长,但允许更多的差异。
它使用每个枚举值都是静态实例。