object
需要保存全局可用的緩存。爲了初始化緩存,對象需要傳遞從應用程序中運行的第三方框架獲得的變量。將參數傳遞給施工對象
由於對象不採用構造函數參數,因此如何將變量從框架傳遞給對象以便在對象構造期間可用?
解決方法是在對象上有一個init方法(它接受第三方框架變量),並添加一些腳手架代碼。但是,有沒有更好的方法?
object
需要保存全局可用的緩存。爲了初始化緩存,對象需要傳遞從應用程序中運行的第三方框架獲得的變量。將參數傳遞給施工對象
由於對象不採用構造函數參數,因此如何將變量從框架傳遞給對象以便在對象構造期間可用?
解決方法是在對象上有一個init方法(它接受第三方框架變量),並添加一些腳手架代碼。但是,有沒有更好的方法?
嗯所以我不會建議你自己寫一個緩存。有更好的工作庫。這個名爲Mango
的Scala項目包含了基於Java的優秀基於Guava
的庫,該庫提供了緩存功能。
你可以寫這樣的代碼(從文檔),
import java.util.concurrent.TimeUnit
import org.feijoas.mango.common.cache._
// the function to cache
val expensiveFnc = (str: String) => str.length //> expensiveFnc : String => Int
// create a cache with a maximum size of 100 and
// exiration time of 10 minutes
val cache = CacheBuilder.newBuilder()
.maximumSize(100)
.expireAfterWrite(10, TimeUnit.MINUTES)
.build(expensiveFnc) //> cache : LoadingCache[String,Int]
cache("MyString") //
也有一個叫ScalaCache
簡單庫,優秀的在這。 Check it here這隻適用於Scala 2.11以上版本,因爲使用了宏。
通常,您不會在object
上放置可變狀態。但是如果你確實需要,你可以在其上放置一個var
字段。
object TheObject {
var globalMutableState: Option[TheStateType] = None
}
無論設置該狀態的需要,都可以通過賦值來完成。
TheObject.globalMutableState = Some(???)
無論需要引用它可以直接做到這一點。
TheObject.globalMutableState.get
「對象不需要構造器參數...在對象構造過程中可用」 - 您是否說這是不可能的,然後問如何在同一句話中做到這一點? –