2013-08-06 22 views
0

比方說,我有一個類型的類泛型類型的類實例的性能

trait CanMeow[T] { 
    def meow(t:T):String 
} 

現在我有一個不同類型的類

trait IsCatEquivalent[T] { 
    def makeSound(t:T):String 
    def isAlive(t:T):Boolean 
} 

現在我想讓CanMeow型類的每個CatEquivalent成員。我能做的是

implicit def catEquivalentCanMeow[T](implicit ce:IsCatEquivalent[T]) = new CanMeow[T] { 
    def meow(t:T) = ce.makeSound(t) 
} 

這是如何影響性能的?從每次使用類型爲CanMeow [T]的隱式參數調用某個方法的外觀時,都會構造一個新對象。是這樣嗎?如果這款產品足夠便宜,不值得緩存實例?

其他問題:有沒有更好的方法來做到這一點? (使一個類擴展另一個類可能不是一個選項,例如,如果它們來自不同的庫)

回答

4

要比較隱式轉換和其替代方法的性能影響,請參閱this articleThis question包含另一個微基準。

+0

謝謝,我應該想到隱式轉換。 –