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

wil*_*amg 3 java oop inheritance

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

我考虑的选项:

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

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

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

spa*_*ead 5

我会选择第二个,"有一个非常长的超类构造函数." 如果我们遵循您引用问题中详述的方法,那么超类构造函数protected并不意味着被类层次结构或包外部的任何东西调用.我的感觉总是,一旦某些东西没有暴露在那个边界之外 - 也就是说,它不是"API"的一部分 - 那么它看起来并不重要.让它有八种不同类型的不同参数,甚至更多.是的,它可以从包中看到,但从原始解决方案中可以清楚地看出,该构造函数不应由除子类之外的任何东西调用.这是不public可见度的另一个动机.

当然,当你谈到public东西时,你做干净事情的直觉是正确的.你问这个问题的事实表明你有正确的直觉.