2013-04-09 109 views
0

我有一種情況,我想使用有界泛型類型作爲可生成類的約束。問題是我需要泛型中的類型別名類型約束

abstract class SomeAbstractClass 

trait Foo[A <: SomeAbstractClass] 

trait Bar[A] extends Foo[A]  
// Fails error: type arguments [A] do not conform to trait Foo's type parameter bounds [A <: SomeAbstractClass] 

// Need to write it like this, for every single subclass of Foo 
trait Bar[A <: SomeAbstractClass] extends Foo[A] 

有沒有一種更簡單的方法來通過系統提升它,而不必每次都重新輸入界限?

回答

1

對類型參數的約束是約束。它們不會像你希望的那樣通過繼承來傳遞。

+0

你可以建議這將導致相同效果的方法? – Refefer 2013-04-09 15:16:25

+0

如果有辦法,我想不起來。沒有界限的類型參數的引入是完全不受限制的,並且沒有辦法使其與另一個參數化類型上的界限類型參數兼容,而沒有明確指出綁定在新類型參數上的兼容類型(即,至少與限制類型)。 – 2013-04-09 15:27:00

1

也許這是適用,或至少產生一些新的想法:

abstract class SomeAbstractClass 
trait Foo { // propagated by abstract type member 
    type A <: SomeAbstractClass 
} 
trait Bar extends Foo // no generic type parameter needed here 
trait BAR[SAC <: SomeAbstractClass] extends Bar { type A = SAC } // introduce type parameter 
trait Baz[SAC <: SomeAbstractClass] extends BAR[SAC] // generic type parameter needed here