2013-04-09 87 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