【发布时间】:2018-05-20 19:00:32
【问题描述】:
我正在使用一个类的库,该类的定义如下所示:
abstract class ParentClass[X, Y <: ParentClass[X, Y, M], M <: OtherClass[X, M]]
这个类有子类,像这样扩展这个类:
abstract class ChildClass[B, C <: ChildClass[B, C, D], D <: OtherChildClass[B, D]] extends ParentClass[B, C, D]
并且该子类具有以这种方式扩展它的子类:
class SomeClass extends ChildClass[F, SomeClass, SomeOtherClass]
我将如何处理ParentClass 的泛型?例如,如果我想创建共享相同祖先类型ParentClass 的对象的Array,我可以这样做:
getArrayOfParentClass(): Array[ParentClass[_, _, _]]
但这不尊重类定义中提出的类型界限。
似乎存在类型是 F-Bounded Polymorphic 类型的主要解决方案之一,但我似乎无法找到使用存在类型来处理这种情况的解决方案,我也没有看到任何关于类的存在类型的示例具有超过 1 个类型参数。我想它会像这样工作,但还没有完全弄清楚:
// Doesn't compile
getArrayOfParentClass(): Array[X forSome {type X <: ParentClass[A, X, M forSome {type M <: OtherClass[A, M]}]
【问题讨论】:
标签: scala types polymorphism type-parameter existential-type