scala - 匹配编译时类型未知的 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 是否返回正确的泛型类型的正确方法是什么?
解决方案
推荐阅读
- angular - Spring Boot websocket通知片状
- vba - 使用 VBA 更改 microsoft word 中的“总编辑时间”
- amazon-web-services - 我们可以通过 SSH 连接到 AWS 中的 Windows EC2 实例吗?
- node.js - 使用 npx create-react-app 时收到此错误消息
- regex - 将两个字符类组合在一起以匹配最大允许字符
- caching - 如何在 node.js 中设置 redis 最大内存策略
- java - Spring和Hibernate映射问题一对多
- android-studio - 下载 kotlin-stdlib 和 kotest runner 花费几乎无限的时间
- python - 模块“keras.utils.generic_utils”没有属性“populate_dict_with_module_objects”
- reactjs - React.createElement 与字符串内的元素