scala> val i = (0, 0)
i: (Int, Int) = (0,0)
scala> i.getClass
res0: Class[_ <: (Int, Int)] = class scala.Tuple2$mcII$sp
scala> def f[T: reflect.ClassTag](t: T) = implicitly[reflect.ClassTag[T]]
f: [T](t: T)(implicit evidence$1: scala.reflect.ClassTag[T])scala.reflect.ClassTag[T]
scala> f(i)
res1: scala.reflect.ClassTag[(Int, Int)] = scala.Tuple2
隱含的ClassTag
的說法是錯誤的。 scala.Tuple2
不是i
的類。正確的ClassTag
將用於scala.Tuple2$mcII$sp
。如何獲得專門類型的ClassTag?
這種行爲對我們來說是一個問題,因爲我們使用Kryo進行序列化。你給Class
參數readObject
。正如我們從ClassTag
中得出的那樣,我們給它的專門課程錯了。然後我們讀垃圾。
我使用ClassTag
錯了嗎?或者這是Scala 2.11.0中的一個錯誤?
我們可以使用KRYO的'writeClassAndObject'解決此在每個元組的1個字節的成本。無論如何,我對這個答案很感興趣。 –