2

Scala で既存の変数データにアクセスするにはどうすればよいですか。例を挙げます:

クラスストレージ:マップ(および私が使用するその他のデータ)があります

クラス A:

val storageManager = new storage();
storageManager.putValue("key","value");
println("A: " + storageManager.getValue("key"));

クラス B:

val storageManager2 = new storage();
println("B: " + storageManager2.getValue("key"));

結果は次のとおりです。

A: value

B: null

クラス B にも「値」を出力させたいと思います。つまり、ストレージ クラスの内容を、それらにアクセスするすべてのクラスで同じにします。

storeManager 変数を渡すのは唯一の方法ですか? 私はそれを避けたいので

4

2 に答える 2

3

本当に変数を渡す必要があります。これらの 2 つのクラスが同じストレージ マネージャーを使用していることが明確になるため(必要に応じて変更できるようになります)、長期的にはより保守しやすいコードになります

ただし、共有ストレージを使用する場合は、シングルトン オブジェクトに作成して参照するだけです。

object StorageForAB {
  val storageManager = new storage
}

class A {
  def storageManager = StorageForAB.storageManager
}
class B {
  def storageManager2 = StorageForAB.storageManager
}

(変数をコピーする理由がないため、に変更valしました。単に共通コピーを参照してください。)def

これにより、 のガベージ コレクションが妨げられることに注意してくださいstorageManager。また、これはとのstorageManagerすべてのインスタンスで同じものを共有することにも注意してください。あなたがそれを望まないのであれば、あなたがそう言わなければ、与えられたものが適切なものとどのようにペアになると期待するのかわかりません(たとえば、それらに同じを渡すことによって)。ABABstorage

于 2013-05-25T21:43:01.857 に答える