gpt4 book ai didi

scala - 绕过模式匹配中的类型删除

转载 作者:行者123 更新时间:2023-12-04 15:03:52 24 4
gpt4 key购买 nike

我正在尝试解决模式匹配中的类型删除问题。假设:

import java.io._

trait Serializer[V] {
def save(os: OutputStream, v: V): Unit
def load(in: InputStream): V
}

trait HasSerializer[V] { def serializer: Serializer[V] }

我怎样才能在没有警告和没有警告的情况下编译它 asInstanceOf :
def test[V](os: OutputStream, v: V): Unit = v match {
case hs: HasSerializer[V] => hs.serializer.save(os, v)
case _ => ???
}

? test使用映射中的值调用,并且无法提供类 list 。

任何花哨的提取技巧?

最佳答案

如果你可以让 Serializer 成为一个抽象类,你可以给它一个 Manifest 作为隐式构造函数参数,并在构造时使用它来获取具体类,然后在稍后使用它进行动态类型检查。

import java.io._

abstract class Serializer[V: Manifest] {
def save(os: OutputStream, v: V): Unit
def load(in: InputStream): V
val clazz = manifest[V].erasure
}

val ser = new Serializer[Int] {
def save(os: OutputStream, v: Int) {
os.write((v.toString + "\n").getBytes)
}

def load(in: InputStream) = {
val line = new BufferedReader(new InputStreamReader(in)).readLine()
line.toInt
}
}

ser.clazz // java.lang.Class[_] = int

关于scala - 绕过模式匹配中的类型删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5666510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com