2014-04-01 90 views
2

我對scala非常陌生,並且在隱含概念上掙扎。含義和類型定義

我有一個類定義如下:

class SomeClass[A <: AA, B <: BB](val someParameter: String) 

我想使用這個類與其他類型不從AA和BB繼承,像這樣:

val myInstanceOfSomeClass = SomeClass[C, D] 

知道是c和D(它們是Java類,如果有幫助的話)可以轉換爲AA和BB實例,這要歸功於它們的構造函數

def myAInstance(someCValue : C) : A = new A(someCValue) 

myInstanceOfSomeClass在另一個函數中用作SomeClass [C,D]類型的參數。

我知道這件事情涉及到隱性的定義,但我相當的語法丟失,特別是在和我應該如何定義的隱含定義...

那麼,我該如何使用我SomeClass的其他類型那可以轉換爲定義的類型?

編輯我不能直接修改SomeClass[A <: AA, B <: BB]的定義,因爲它來自外部庫。

回答

2

有一個與<%相關的稱爲「視圖邊界」的相關類型邊界,它通過包含文字的子類型以及隱式轉換在使用點可用的那些來鬆開<:約束。

因此,所有你需要做的是改變你的SomeClass這樣:

class SomeClass[A <% AA, B <% BB](val someParameter: String) 

...,當然,一定要使用類轉換是可用的。這意味着你將需要在轉換implicit關鍵字:

implicit def myAInstance(someCValue : C) : A = new A(someCValue) 
+0

對不起,我覺得這不是在我的崗位清楚,但我不能改變的'類SomeClass的定義[A <:AA ,B <:BB](val someParameter:String)'。這就是我所說的「我想用這種方式使用類:'val myInstanceOfSomeClass = SomeClass [C,D]'。我正在編輯這個問題。 – user3485809

+0

然後你運氣不好,必須明確地應用轉換(當然這不需要是一個「隱含的」) –

+0

嗯......我想我可以讓它成爲......不管怎樣,謝謝!我應該接受你的回答嗎? – user3485809