我有一种情况,在类初始化期间,子类(让我们称之为SubClass
)调用基类的静态方法(让我们称之为BaseClass
并传递SubClass.class
作为参数来标识正在初始化的特定类,或者用Java:
public class SubClass extends BaseClass {
static { BaseClass.init(SubClass.class); }
...
}
而不是BaseClass
使用方法:
protected static void init(Class<?> c) {
...
}
我想要做的是BaseClass
自动调用init
,例如:
public class BaseClass {
static { init(thisclass); }
...
}
所以,问题是,Java是否有一些关键字,由上面的thisclass
表示,它返回在类初始值设定项中初始化的类?
答案 0 :(得分:3)
不,没有。
此外,正如user2357112在评论中所述,seek()
的静态初始化程序只会运行一次,同时初始化testfile
。它不像实例构造函数,每次创建子类的实例时都会运行。基本上你应该坚持现有的计划。
值得注意的是,如果你期望子类将某些东西“注册”某些东西,你可能会对子类初始化不发生时感到惊讶。
例如,如果基类中有静态方法BaseClass
,则调用BaseClass
将不会初始化foo
- 只有基类,因为子类没有需要进行初始化,因为它的代码都没有执行。
答案 1 :(得分:-2)
没有,因为此时没有实例。就像在静态方法中一样。