2014-03-31 194 views
0

有什麼辦法可以引用類型參數嗎?斯卡拉請參閱類型參數

,比如我有wantd,使一類獲取枚舉的子類,並比使用他:我想做什麼 例如:

class MyEnum1 extends Enumeration{ 
    type MyEnum=Value 
    a1=Value("A1") 
    b1=Value("B1") 
} 

class MyEnum2 extends Enumeration{ 
    type MyEnum=Value 
    a2=Value("A2") 
    b2=Value("B2") 
} 


class UseType[T:<Enumeration]{ 
    val values=T.values 
} 

你知道我該怎麼辦呢?

+1

難道你不把自己的實例(和他們的數據)與類(藍圖)放在一起嗎? –

回答

2

我認爲你需要在對象級別,不是那種水平工作,並通過一個實例(它可以是一個單獨的對象)到類:

object MyEnum1 extends Enumeration { 
    type MyEnum1 = Value 
    val a1 = Value("A1") 
    val b1 = Value("B1") 
} 

object MyEnum2 extends Enumeration { 
    type MyEnum2 = Value 
    val a2 = Value("A2") 
    val b2 = Value("B2") 
} 

class UseType[T <: Enumeration](val t: T) { 
    println(t.values) 
} 

new UseType(MyEnum1)    //> MyEnum1.ValueSet(A1, B1) 
new UseType(MyEnum2)    //> MyEnum2.ValueSet(A2, B2) 

我不明白爲什麼你想這樣做,但是 - 你能解釋你想達到什麼嗎?你可能需要給MyEnum1MyEnum2增加一個額外的共享特性才能使它們在代碼中互換使用。

另請參閱this questionthis one以及this one - 根據您的使用情況,您可能更喜歡使用密封大小寫類。

+0

爲什麼你寫了[T <:Enumeration](** val ** t:T) 當我嘗試寫它沒有val它沒有編譯。 有什麼想法? –

+0

我不知道爲什麼我加了'val'! - 只有在你想將't'作爲'UseType'屬性的情況下才需要,例如'UseType(MyEnum1).t' – DNA