这有点奇怪,可能会发出不同的语法,但请跟我说。我已经尝试了三个月,我确信我需要一种方法来做到这一点:
public abstract class Sup{
...
//This is implemented here because I cannot create an abstract static
//only implemented by the children but called statically by methods in
//the parent (more info later on in the post):
protected static Class<? extends Sup> getTypeClass(){ return Sup.class };
public static void init(){
...
alreadyDeclaredHashMap.put(getTypeClass(), hashMapOfOtherStuff);
}
}
public class A extends Sup{
static{
init();
}
protected static void getTypeClass(){ return A.class };
}
public class B extends Sup{
static{
init();
}
protected static void getTypeClass(){ return B.class };
}
... and so on.
因此,如果我要打印出alreadyDeclaredHashMap
,它就会像:
class A -> hashMapOfOtherStuff
class B -> hashMapOfOtherStuff
class C -> hashMapOfOtherStuff
...
但相反它打印:
class Sup -> hashMapOfOtherStuff
class Sup -> hashMapOfOtherStuff
class Sup -> hashMapOfOtherStuff
...
因为扩展类隐藏getTypeClass()
但不能覆盖它。这只是一个例子。实际上,我正在建立一个单位系统,我有很多方法,具体取决于getTypeClass()
, 真的 喜欢不必在每次扩展中重写它们class(其中有一个不确定的数字),实现的唯一区别是类名。
非常感谢!
P.S。这些方法 do 必须是静态的,因为它们是静态调用的(我宁愿不必创建一个虚拟实例或反射来调用它们。)
答案 0 :(得分:0)
没有办法让它发挥作用。类editText
中的静态代码不了解类sup
和类A
,即使从其中一个方法调用B
方法也是如此。
静态方法不是“virtual”,因此从init
中的静态代码调用getTypeClass()
将调用该实现,而不是任何子类实现。
现在,如果您希望重用Sup
和init
中的A
方法,则必须将其作为参数传递。
B