2

不完全确定如何表达这个问题。在 java 中,如果您有一个静态实例 var 并且所属类位于 tomcat/classes 或 tomcat/lib 中,以便许多不同的 Web 应用程序(tomcat 类加载器的子级)可以使用它,则在一个 Web 应用程序中更改静态 var 会影响其他。

Scala 伴生对象也是如此吗?据我了解,Scala 单例对象是编译器创建的由静态变量引用的单例 Java 类。所以答案是肯定的。如果 web 应用 A 创建了一个新的 scala Foo 并且 web 应用 B 创建了一个新的 scala Foo 并且 Foo 类来自一个父类加载器,那么每个 web 应用都会有它自己的 Foo 实例,但实际上只有一个 Foo 的伴生对象的实例。

我在这里错过了什么吗?

提前感谢您的任何见解。

4

1 回答 1

0

实际上,这一切都取决于类加载考虑,无论在 java 或 scala 对象中使用静态变量。

对于由同一个类加载器加载的所有类,单例对象将是相同的,因为底层运行时对于 scala 和 java 的工作方式相同。

如果您正在考虑在 scala 对象中使用可变变量来访问/修改某些共享的全局状态,我警告您这不是一个好的功能实践......但这取决于您需要做什么。

于 2013-03-21T13:13:31.070 回答