2016-04-03 121 views
0

object需要保存全局可用的緩存。爲了初始化緩存,對象需要傳遞從應用程序中運行的第三方框架獲得的變量。將參數傳遞給施工對象

由於對象不採用構造函數參數,因此如何將變量從框架傳遞給對象以便在對象構造期間可用?

解決方法是在對象上有一個init方法(它接受第三方框架變量),並添加一些腳手架代碼。但是,有沒有更好的方法?

+0

「對象不需要構造器參數...在對象構造過程中可用」 - 您是否說這是不可能的,然後問如何在同一句話中做到這一點? –

回答

1

嗯所以我不會建議你自己寫一個緩存。有更好的工作庫。這個名爲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以上版本,因爲使用了宏。

2

通常,您不會在object上放置可變狀態。但是如果你確實需要,你可以在其上放置一個var字段。

object TheObject { 
    var globalMutableState: Option[TheStateType] = None 
} 

無論設置該狀態的需要,都可以通過賦值來完成。

TheObject.globalMutableState = Some(???) 

無論需要引用它可以直接做到這一點。

TheObject.globalMutableState.get