2009-12-11 3 views
36

Javaでは、クラス変数を使用して各新しいインスタンスに一意のIDを割り当てることがあります。私は何かをするスカラーのクラス変数は何に置き換えられますか?

public class Foo { 

    private static long nextId = 0; 

    public final long id; 

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

    [...] 

} 

どうすればこのことができますか?コンパニオンオブジェクト上

答えて

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オブジェクトのみです。 – rightfold

+1

クラスとオブジェクトに同じ名前を使用する傾向があります。これは、コードのデバッグに多くの役に立ちます。 –

+0

これら2つの回答を組み合わせる必要があります – Florian

関連する問題