Java - 泛化方法 - "Class"用于类型参数的实例

标签 java

我有几种用于序列化不同类的方法,比如说 A、B 和 C。

它们看起来像这样(对于每个类):

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

我想以某种方式概括这些方法以避免代码重复。

首先,我考虑参数化这个方法,但由于类型删除,这行不通 - 我仍然需要“A.class”作为参数传递。

然后我考虑另外传递一个“Class”实例,以便它可以用作 FieldSerializer 的第二个参数并参数化该方法:

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

但是看起来仍然不对。有什么办法可以让它更整洁吗?理想情况下,我希望有一个参数化方法或传递类实例。

最佳答案

您可以使用Object.getClass() :

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

关于Java - 泛化方法 - "Class"用于类型参数的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29335475/

相关文章:

java - 使用不同类型的条件(三元)运算符的局部变量类型推断

java - 使用两个不同的线程打印偶数和奇数

java - 将 ArrayList of Points 存储到 Java for Android 中的文件

Java Stream 平均值的最大值

java - 在 Google App Engine 上,是否可以在不使用参数化查询的情况下使用 JDOQL Date?

java - 从任务中调用任务的替代方案,Gradle

java - 如何标记 i 某事 = true

java - VideoView结束后如何开始 Activity

java 。在类之间共享 MySQL 连接

java - GUI javafx 应用程序无法通过 Linux 中的服务打开