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]

有没有一种更简单的方法可以通过系统来推广它,而不必每次都重新输入边界?

4

2 回答 2

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
于 2013-04-09T07:27:20.513 回答
1

类型参数的约束是约束。它们不会像您希望的那样通过继承传递。

于 2013-04-09T04:00:51.747 回答