Scala 泛型中的类型别名类型约束

Scala 泛型中的类型别名类型约束,scala,generics,Scala,Generics,我有一种情况,我想使用一个有界泛型类型作为可以生成什么类的约束。问题是我需要 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 <: SomeAbstra

我有一种情况,我想使用一个有界泛型类型作为可以生成什么类的约束。问题是我需要

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]
abstract类SomeAbstractClass

trait Foo[A类型参数上的约束是约束。它们不会像您希望的那样通过继承进行传递。

也许这是适用的,或者至少产生了一些新的想法:

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
abstract类SomeAbstractClass
trait Foo{//由抽象类型成员传播

类型A你能推荐一种能产生同样效果的方法吗?如果有办法的话,我想不出来。引入一个没有边界的类型参数是完全不受约束的,如果不明确说明一个兼容的类型边界,就无法使它与另一个参数化类型上的一个有边界类型参数兼容e新类型参数(即至少具有相同限制性的参数)。