Arrays 从classOf[A]获取classOf[Array[A]]
我有一个scala类列表,格式如下:Arrays 从classOf[A]获取classOf[Array[A]],arrays,scala,Arrays,Scala,我有一个scala类列表,格式如下: List(classOf[A], classOf[B], ...) 我需要将这些类以及类的数组注册到kryo中。结果是: kryo.register(classOf[A]) kryo.register(classOf[Array[A]]) kryo.register(classOf[B]) kryo.register(classOf[Array[B]]) ... 因此,有了这个列表,我可以使用foreach来注册类和类的数组 但是,我无法从class
List(classOf[A], classOf[B], ...)
我需要将这些类以及类的数组注册到kryo中。结果是:
kryo.register(classOf[A])
kryo.register(classOf[Array[A]])
kryo.register(classOf[B])
kryo.register(classOf[Array[B]])
...
因此,有了这个列表,我可以使用foreach来注册类和类的数组
但是,我无法从classOf[A]获取classOf[Array[A]]。我已经按照以下方法尝试了ClassTag:
def getArrayClass[T: ClassTag](c: Class[T]): Class[_] = {
classOf[Array[T]]
}
结果不正确(尽管两个结果的类型相同),kryo仍然抱怨类未注册:A[]
scala> getArrayClass(classOf[A])
res0: Class[Array[A]] = class java.lang.Object
scala> classOf[Array[A]]
res1: Class[Array[A]] = class [LA;
有什么线索吗?谢谢。您可以使用方法ClassTag
:
def getArrayClass(c: Class[_]): Class[_] =
scala.reflect.ClassTag(c).wrap.runtimeClass
请注意,如果c
是classOf[Null]
或classOf[Nothing]
(我相信这是ClassTags中的bug),则这不起作用。对于任何其他类
,它都可以工作
您也可以使用Java方式,而不使用ClassTag
s,这基本上是等效的:
def getArrayClass(c: Class[_]): Class[_] =
java.lang.reflect.Array.newInstance(c, 0).getClass
您可以使用方法ClassTag
:
def getArrayClass(c: Class[_]): Class[_] =
scala.reflect.ClassTag(c).wrap.runtimeClass
请注意,如果c
是classOf[Null]
或classOf[Nothing]
(我相信这是ClassTags中的bug),则这不起作用。对于任何其他类
,它都可以工作
您也可以使用Java方式,而不使用ClassTag
s,这基本上是等效的:
def getArrayClass(c: Class[_]): Class[_] =
java.lang.reflect.Array.newInstance(c, 0).getClass