Java - 泛化方法 - 用于类型参数的“类”实例

时间:2015-03-29 22:07:30

标签: java

我有几种序列化不同类的方法,让我们说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实例。

1 个答案:

答案 0 :(得分:4)

您可以使用Object.getClass()

public byte[] serializeData(T object) throws IOException {
    ...
    FieldSerializer<?> serializer = new FieldSerializer<T>(kryo, object.getClass());
    kryo.register(object.getClass(), serializer);
    ...
}