1
我有以下层次结构,我想定义任何Description
列表,但无法弄清楚它的参数类型。斯卡拉高级存在类型
abstract class Context
class Local extends Context
class Browsing extends Context
abstract class Fruit[C <: Context]
class Apple[C <: Context](id: Int) extends Fruit[C]
class Banana[C <: Context](id: Int) extends Fruit[C]
abstract class Description[U[X <: Context] <: Fruit[X]] // U can't be covariant
class Apples extends Description[Apple]
class Bananas extends Description[Banana]
基本上,我想这样的事情(不按原样编译):
val l: List[Description[_]] = List(
new Apples,
new Bananas
)
任何方式来实现这一目标?
你怎么指望使用'l'? – talex
请参阅http://stackoverflow.com/questions/32182694/how-to-define-an-existential-higher-kinded-type-in-scala或http://stackoverflow.com/questions/28176807/suppressing-unchecked-警告更高级的存在型 –
实际上,我可以使用超类作为没有参数类型的'Description'并使用这些方法。但是在'Description'里面,我引用了其他使用'U'参数化的对象,因此我们不得不为这些对象创建超类(以及它们的子类......它是一个整体层次结构)。唯一的一点是尽可能多地保留关于类型的信息,而不需要创建任何额外的抽象层。 – olivier