我的问题几乎与此处发布的问题完全相同:具有最终未初始化字段的抽象类,我喜欢该解决方案.但是,我的问题有点复杂,因为抽象类有多个不同类型的最终字段.例如,我有四个int,两个int[]和两个double.强制子类初始化这些变量的最佳方法是什么?
我考虑的选项:
Map第一个选项不是很优雅,看起来有点复杂,特别是对于数组.第二种选择非常繁琐,第三种选择似乎就是我过度了.
这样做有"正确"的方法吗?或者如果没有,提出的三个选项中哪一个最优雅?
在Java中,我们可以final在基类及其子类中以及基类中的内联初始化块中初始化构造函数中的字段.但是,似乎我们无法初始化final子类中的内联初始化程序块中的字段.此行为主要影响super无法调用构造函数的匿名类.
abstract class MyTest {
final protected int field;
public MyTest() {
// default value
field = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
MyTest anonymTest = new MyTest() {
{
// Error: The final field MyTest.field cannot be assigned
field = 3;
}
};
Run Code Online (Sandbox Code Playgroud)
有没有办法初始化finalanonymus类中的继承字段?
注释:这个问题不是关于构造函数,而是关于最终字段初始化.