在Java中,我们可以初始化一个final
基类及其子类的构造函数中的字段,以及基类的内联初始化 block 中的字段。然而,我们似乎无法初始化final
子类中内联初始化 block 中的字段。此行为主要影响匿名类,其中 super
无法调用构造函数。
abstract class MyTest {
final protected int field;
public MyTest() {
// default value
field = 0;
}
}
<小时/>
MyTest anonymTest = new MyTest() {
{
// Error: The final field MyTest.field cannot be assigned
field = 3;
}
};
有没有办法初始化继承的final
匿名类中的字段?
评论:这个问题不是关于构造函数的,而是关于final字段初始化的。
最佳答案
您必须在声明期间或构造函数中初始化最终实例变量。但是,您可以向构造函数提供值
abstract class MyTest {
final protected int field;
public MyTest() {
// default value
this(0);
}
public MyTest(int f) {
field = f;
}
}
MyTest anonymTest = new MyTest(3) {
};
更新:添加了使用默认值的构造函数
关于java - 有没有办法在匿名类中初始化最终字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36411092/