2

この質問の言い回しが正確にわからない。Javaでは、静的インスタンス変数があり、所有するクラスがtomcat/classesまたはtomcat/libにあり、多くの異なるWebアプリ(tomcatクラスローダーの子)がそれを使用できる場合、1つのWebアプリで静的変数を変更すると影響があります他人。

これはScalaコンパニオンオブジェクトにも当てはまりますか?私が内部で理解していることから、Scalaシングルトンオブジェクトは、静的変数によって参照されるコンパイラー作成のシングルトンJavaクラスです。したがって、答えは「はい」になります。WebアプリAが新しいscalaFooを作成し、WebアプリBが新しいscala Fooを作成し、Fooクラスが親クラスローダーからのものである場合、各Webアプリには独自のFooインスタンスがありますが、実際にはFooのコンパニオンオブジェクトのインスタンスは1つだけです。

ここで何かが足りませんか?

洞察を事前に感謝します。

4

1 に答える 1

0

実際には、java または scala オブジェクトで静的変数を使用するかどうかに関係なく、すべてクラスローディングの考慮事項に依存します。

基礎となるランタイムは scala と Java で同じように動作するため、シングルトン オブジェクトは、同じクラスローダーによってロードされるすべてのクラスで同じになります。

scala オブジェクトで変更可能な変数を使用して、共有されたグローバル状態にアクセス/変更することを検討している場合、それは適切な機能的プラクティスとは見なされないことを警告します...しかし、それは何をする必要があるかによって異なります。

于 2013-03-21T13:13:31.070 に答える