我有几种序列化不同类的方法,让我们说A,B和C.
他们看起来像这样(每个班级):
public byte[] serializeData(A object) throws IOException {
...
FieldSerializer<?> serializer = new FieldSerializer<A>(kryo, A.class);
kryo.register(A.class, serializer);
...
}
我想以某种方式推广这些方法以避免代码重复。
首先,我考虑过对这种方法进行参数化,但由于类型擦除而无法工作 - 我仍然需要&#34; A.class&#34;作为一个论点传递。
然后我考虑过传递&#34; Class&#34;的实例。这样它就可以用作FieldSerializer的第二个参数并参数化方法:
public <T> byte[] serializeData(T object, Class clazz) throws IOException{
...
FieldSerializer<?> serializer = new FieldSerializer<T>(kryo, clazz);
kryo.register(clazz, serializer);
...
}
但是它仍然看起来不对。反正有没有让它更整洁?理想情况下,我想要一个参数化方法或传递Class实例。
答案 0 :(得分:4)
您可以使用Object.getClass()
:
public byte[] serializeData(T object) throws IOException {
...
FieldSerializer<?> serializer = new FieldSerializer<T>(kryo, object.getClass());
kryo.register(object.getClass(), serializer);
...
}