2016-02-23 78 views
0

我想爲我的應用程序創建一個單例對象,但我想從另一個對象初始化它。Scala:通過調用構造函數創建單例對象

對於前:

object A{ 
val x = 10 
val b = B(x) 
} 

object B(y:Int){ 
var z = y 
} 

但是,這是行不通的,因爲對象可是沒有構造函數。 我需要從另一個對象初始化對象,因爲在運行時會知道val x(在上例中)。

針對此問題的任何解決方法?

+1

可能的重複[如何初始化對象值只有在運行時已知值?](http://stackoverflow.com/questions/8782448/how-do-i-initialize-object-vals-with-values-只有運行時才知道) – 757071

+0

http://stackoverflow.com/q/27801150/1296806的副本,但它不是一個很好的用例,你想避免考慮初始化順序的B/C。 –

回答

1

對象沒有構造函數,因爲它是靜態初始化的(只要它被加載)。什麼,你可能尋找的是一個普通類:

class B(y: Int) { 
    var z = y 
} 

如果你真的需要一個單身,你爲什麼會需要從不同的對象初始化呢?

+0

我需要從另一個對象初始化它,因爲在運行時會知道單例對象的屬性。並且它是具有單例對象的應用程序的要求 – Alok

+0

那麼,爲什麼不簡單地在創建另一個對象時更改屬性的值? – irundaia

+0

這是一個選項。但我想如果有更清潔的方式。感謝您的建議:) – Alok

0

scala中的對象被延遲加載,這意味着它們只會在需要時纔會被實例化。

如果您在想要的構造函數調用之前不使用該對象,您可以簡單地將init函數用作構造函數,那麼該對象將被實例化。

相關問題