2012-01-22 14 views
1

EnumerationオブジェクトとクラスをScalaの同じレベルで宣言できますか?Enumerationオブジェクトと値クラスを同じレベルで定義する

私はこれを使い始めましたが、インスタンスを登録する最も良い方法は何か分かりません。

object Gender extends Enumeration { 
    val MALE = new Gender(0) 
    val FEMALE = new Gender(1) 
} 

class Gender(val id: Int) extends Gender.Value { 

} 

このための動機は、私がGender.Genderが、性別として列挙型クラスを参照したくないということです。

+0

オブジェクトはクラスのインスタンスではないので、その上に 'new'を適用することはできません。 –

+0

はい、新しいGenderはオブジェクトではなくクラスを参照しています。このコードはコンパイルされ、列挙型定数にアクセスできますが、Enumerationはそれらについて知りません –

答えて

3

これは動作します:

object Gender extends Enumeration { 
    val male = new Gender 
    val female = new Gender 

    class Sneaky extends Val(nextId, null) 
} 

class Gender extends Gender.Sneaky 

> println(Gender.values) 
Gender.ValueSet(male, female) 

私は本当にそれについて良い感じていないが。あなたはそれを使用する前に

object Gender extends Enumeration { 
    ... 
} 

type Gender = Gender.Value 

またはimportタイプ::私は(あなたができる場合は、この範囲で)タイプのエイリアスを作成するか 方が良いだろうと思う

object Gender extends Enumeration { 
    val male, female = Value 

    type Gender = Value 
} 

import Gender._ 
val x: Value = male 

(または、あなたの場合can、caseクラスを使用することができます)。

+0

提案に感謝します。この場合、タイプエイリアスまたはインポートの使用はオプションではありません。 –

関連する問題