2013-04-14 4 views
1

мне интересно, какой тип я кладу вместо XXXчто тип вход classOf

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

EDIT: Для почему я хочу это сделать.

Мне нужно зарегистрировать много классов, используя приведенный выше код. Я хотел, чтобы удалить дублирование вызова kyro.register несколько раз, в надежде написать код, как показано ниже:

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

Другой вопрос, могу ли я передать строку вместо этого? и каким образом преобразовать его в класс в registerClass?

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

EDIT 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) 
+0

Можете ли вы показать, что такое 'com.mypackage.class1'? И что такое подпись метода 'register' на' kryo'? –

+0

Если 'class1' является определением класса, я подозреваю, что вам нужно будет использовать решение EECOLOR' Seq (classOf [com.mypackage.class1], ...). Foreach (registerClass) ' –

+0

@ KristianDomagala создал EDIT 2 для уточнить далее. – RAbraham

ответ

4

Вы можете сделать это следующим образом:

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

А потом называют это так:

registerClass(classOf[Int]) 
1

параметр типа в classOf должен быть известный во время компиляции. Не зная больше о том, что вы пытаетесь сделать, есть ли причина, по которой вы не можете использовать:

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

отредактировал вопрос, чтобы помочь вам понять, что я пытаюсь сделать – RAbraham

Смежные вопросы