classOf的输入类型是什么

时间:2013-04-14 18:09:53

标签: scala types

我想知道我用什么类型代替XXX

def registerClass(cl:XXX) = kryo.register(classOf[cl])

编辑:为什么我想这样做。

我必须使用上面的代码注册许多类。我想删除多次调用kyro.register的重复,希望编写如下代码:

 Seq(com.mypackage.class1,com.mypackage.class2,com.mypackage.class3).foreach(registerClass)

另一个问题,我可以传递String吗?并以某种方式将其转换为registerClass中的一个类?

Seq("com.mypackage.class1","com.mypackage.class2").foreach(registerClass)

编辑2: 当我写com.mypackage.class1时,它表示我的源中定义的任何类。所以,如果我创建一个类

package com.mypackage.model

class Dummy(val ids:Seq[Int],val name:String)  

我会提供com.mypackage.model.Dummy作为输入 所以,

kryo.register(classOf[com.mypackage.model.Dummy])

Kryo是一个Java序列化库。寄存器类的签名是

register(Class type)

2 个答案:

答案 0 :(得分:4)

你可以这样做:

def registerClass(cl:Class[_]) = kryo.register(cl)

然后像这样称呼它:

registerClass(classOf[Int])

答案 1 :(得分:1)

需要在编译时知道classOf的类型参数。如果不了解您正在尝试做什么,有什么理由不能使用:

def registerClass(cl:XXX) = kryo.register(cl.getClass)