相关疑难解决方法(0)

初始化子类中不同类型的"最终"字段

我的问题几乎与此处发布的问题完全相同:具有最终未初始化字段的抽象类,我喜欢该解决方案.但是,我的问题有点复杂,因为抽象类有多个不同类型的最终字段.例如,我有四个int,两个int[]和两个double.强制子类初始化这些变量的最佳方法是什么?

我考虑的选项:

  • 将所有字段转换为字符串并使用a传递 Map
  • 有一个非常长的超类构造函数
  • 创建一个辅助类,它将充当包装器并封装所有值,然后将此类的实例传递给基类

第一个选项不是很优雅,看起来有点复杂,特别是对于数组.第二种选择非常繁琐,第三种选择似乎就是我过度了.

这样做有"正确"的方法吗?或者如果没有,提出的三个选项中哪一个最优雅?

java oop inheritance

3
推荐指数
1
解决办法
1626
查看次数

有没有办法在anonymus类中初始化final字段?

在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类中的继承字段?

注释:这个问题不是关于构造函数,而是关于最终字段初始化.

java inheritance final

2
推荐指数
1
解决办法
149
查看次数

标签 统计

inheritance ×2

java ×2

final ×1

oop ×1