首页 > 解决方案 > 匹配编译时类型未知的 Scala 泛型

问题描述

我有两个从抽象父类继承的通用类,如下所示:

abstract class Sketch[S]

class CompactSketch[S] extends Sketch[S]

class UpdatableSketch[U, S <: UpdatableSummary[U]] extends Sketch[S] {
    def compact: CompactSketch[S]
}

我有一个返回抽象类型的函数

def heapifySketch[S](bytes: Array[Byte], deserde: SummaryDeserializer[S]): Sketch[S]

我想找出这两个类中的哪一个已经返回并在必要时进行修改

def ReadCompactSketch[U, S <: UpdatableSummary[U]](bytes: Array[Byte], deserde: SummaryDeserializer[S]): CompactSketch[S] = {
    heapifySketch(bytes, deserde) match {
        case s: CompactSketch[S] => s
        case u: UpdatableSketch[U, S] => u.compact
    }
}

像这样的匹配会产生关于类型擦除的警告。我已经查看了 TypeTags,但我似乎找不到直到运行时才知道类型的示例。验证 heapifySketch 是否返回正确的泛型类型的正确方法是什么?

标签: scalagenericstypes

解决方案


推荐阅读