我们有base
类,如下所示:
public class Base {
protected static string rule = "test_1";
public static getRule(){
/* get rule value from origin class*/
}
}
我们有一些从base
类扩展的类。例如:
public class Derived extends Base {
static {
rule = "test_2";
}
}
现在,我们希望获取规则变量,但在某些情况下:
Derived.getRule()
,它将返回test_2
,derived
类rule
中的变量未初始化,则返回test_1
,getRule
来回答问题。我该怎么办?
答案 0 :(得分:1)
问题在于,一旦Derived
类被使用(初始化),Base.rule
就被更改,并且现在test_2
随处可见,而与实际类无关。
因此该技术必须在没有静态的情况下(以这种形式)完成。有一个分类的类级别值。
public class Base {
private static final String BASE_RULE = "test_1";
public String getRule() {
return BASE_RULE;
}
}
public class Derived extends Base {
private static final String DERIVED_RULE = "test_2";
@Override
public String getRule() {
return DERIVED_RULE;
}
}
或者,您可以使用标记器接口-但是它们不是互斥的,因此不适用于某些getCategory()。
public class Base implements Test1Category {
}
public class Derived extends Base implements Test2Category { ... }
if (base instanceof Test2Category) { ... }