2009-12-11 38 views
36

在Java中,我有時使用類變量爲每個新實例分配一個唯一的ID。我做類似在scala中替換類變量是什麼?

public class Foo { 

    private static long nextId = 0; 

    public final long id; 

    public Foo() { 
    id = nextId; 
    nextId++; 
    } 

    [...] 

} 

我該如何在Scala中做到這一點?同伴對象

回答

60

變量:

object Foo{ 
    private var current = 0 
    private def inc = {current += 1; current} 
} 

class Foo{ 
    val i = Foo.inc 
    println(i) 
} 
25

要放大托馬斯的回答:

object定義通常被放在與類相同的文件,並必須具有相同的名稱。這會產生一個具有該類名稱的對象的單個實例,該實例包含您爲其定義的任何字段。換句話說,一個方便的自己動手的單身建築工具包。

在JVM級別,對象定義實際上導致定義一個新類;我認爲它的名字與$相同,例如Foo$。以防萬一您不得不與Java進行一些互操作。

+1

對象不必與類名稱相同,只有_companion objects_do。 – rightfold

+1

我們傾向於爲類和對象使用相同的名稱,因爲它在調試代碼方面有很多幫助。 –

+0

這兩個答案應該合併 – Florian