我有一个带有泛型类型T的函数readObjectFromFile
。我怎么知道类型名称?
import scala.reflect.runtime.universe.{typeOf, TypeTag}
def name[T: TypeTag] = typeOf[T].typeSymbol.name.toString
name[Int]
res5: String = Int
import java.io._
def readObjectFromFile[T](file: File): T = {
val typeName = name[T]
println(s"read ${typeName} from file $file")
val ois = new ObjectInputStream(new FileInputStream(file))
val v = ois.readObject.asInstanceOf[T]
ois.close()
v
}
cmd19.sc:2: No TypeTag available for T
val typeName = name[T]
ps:我知道我可以使用v.getClass.getName,但这可以在 读取对象后完成。我想在阅读对象之前打印这些信息。
答案 0 :(得分:1)
readObjectFromFile
也需要隐式TypeTag
,以便name
能够解决它。
import scala.reflect.runtime.universe.{typeOf, TypeTag}
import java.io._
def name[T: TypeTag] = typeOf[T].typeSymbol.name.toString
def readObjectFromFile[T: TypeTag](file: File): T = {
val typeName = name[T]
println(s"read ${typeName} from file $file")
val ois = new ObjectInputStream(new FileInputStream(file))
val v = ois.readObject.asInstanceOf[T]
ois.close()
v
}