我经常使用无私的特征模式,并且我需要在特征中使用“昂贵的”常量:我希望在我的所有应用程序中拥有这些值的单个实例,这可能需要计算几个步骤。
然而,无私的特质模式导致了以下设计:
- 一个特质 MyStuff
- 一个对象 MyStuff 扩展了 MyStuff
显然,将常量放在对象中并在 trait 中使用它们会产生循环依赖。然而,将它们放在 trait 上,使得所有扩展 trait 的类都可以覆盖它们,因此它们肯定不是应用程序范围的单例。
Scala 编译器是否“足够聪明”以使特征中的最终 val 变为“旧的 java public static final”?