Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取专用类型的类标签? scala>vali=(0,0) i:(Int,Int)=(0,0) scala>i.getClass res0:Class[def f[T:reflect.ClassTag](T:T)=隐式地[reflect.ClassTag[T]] f:[T](T:T)(隐式证据$1:scala.reflect.ClassTag[T])scala.reflect.ClassTag[T] scala>f(i) res1:scala.reflect.ClassTag[(Int,Int)]=scala.Tuple2_Scala - Fatal编程技术网

如何获取专用类型的类标签? scala>vali=(0,0) i:(Int,Int)=(0,0) scala>i.getClass res0:Class[def f[T:reflect.ClassTag](T:T)=隐式地[reflect.ClassTag[T]] f:[T](T:T)(隐式证据$1:scala.reflect.ClassTag[T])scala.reflect.ClassTag[T] scala>f(i) res1:scala.reflect.ClassTag[(Int,Int)]=scala.Tuple2

如何获取专用类型的类标签? scala>vali=(0,0) i:(Int,Int)=(0,0) scala>i.getClass res0:Class[def f[T:reflect.ClassTag](T:T)=隐式地[reflect.ClassTag[T]] f:[T](T:T)(隐式证据$1:scala.reflect.ClassTag[T])scala.reflect.ClassTag[T] scala>f(i) res1:scala.reflect.ClassTag[(Int,Int)]=scala.Tuple2,scala,Scala,隐式ClassTag参数错误。scala.Tuple2不是i的类。正确的ClassTag将用于scala.Tuple2$mcII$sp 这种行为对我们来说是个问题,因为我们用于序列化。您给readObject提供了一个Class参数。当我们从ClassTag获取它时,我们给了它一个错误的类作为专门类。然后我们读取垃圾 我是否使用了ClassTag错误?或者这是Scala 2.11.0中的一个bug?正确答案不会是Scala.Tuple2$mcII$sp。您要求的是Tuple2[Int,Int]的

隐式
ClassTag
参数错误。
scala.Tuple2
不是
i
的类。正确的
ClassTag
将用于
scala.Tuple2$mcII$sp

这种行为对我们来说是个问题,因为我们用于序列化。您给
readObject
提供了一个
Class
参数。当我们从
ClassTag
获取它时,我们给了它一个错误的类作为专门类。然后我们读取垃圾


我是否使用了
ClassTag
错误?或者这是Scala 2.11.0中的一个bug?

正确答案不会是
Scala.Tuple2$mcII$sp
。您要求的是
Tuple2[Int,Int]的标称(并已删除!)类型
在编译时,也就是
Tuple2
。请注意
getClass
是一个非常不同的东西,它可以为您提供运行时值的类。

我们可以使用Kryo的
writeClassAndObject
来解决这个问题,代价是每个元组1个字节。无论如何,我对答案很感兴趣。谢谢您的解释!但是我如何解决这个问题呢问题是
i
的类与我为
i
得到的类标签不匹配?你到底想做什么?哈哈,我想你把我弄到手了:)。
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