我定义了一个hessian2反序列化的工具方法。为了便于使用,使用了泛型。可是遇到了一个问题,其中调用的Hessian2Input#readObject的入参类型是Class实例。那么,怎么获取泛型T的类型呢?
/**
* hessian2反序列化,得到反序列对象
* @param bytes 序列化时生成的字节数组
* @param
* @return
* @throws IOException
*/
public static T deserialize(byte[] bytes) throws IOException {
try (ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes)) {
Hessian2Serialization hessian2Serialization = new Hessian2Serialization();
try {
ObjectInput objectInput = hessian2Serialization.deserialize(null, byteArrayInputStream);
T object = objectInput.readObject( 这里如何在泛型方法里获取T的类型??????? );
log.debug("反序列化的对象=" + object.toString());
return object;
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return null;
}
下面是我依赖的org.apache.dubbo:dubbo:2.7.3.jar中org.apache.dubbo.common.serialize.ObjectInput#readObject的方法声明。
/**
* read object
*
* @param cls object class
* @return object
* @throws IOException if an I/O error occurs
* @throws ClassNotFoundException if an ClassNotFoundException occurs
*/
T readObject(Class cls) throws IOException, ClassNotFoundException;
揭晓答案↓↓↓
/**
* hessian2反序列化,得到反序列对象
*
* @param bytes 序列化时生成的字节数组
* @param
* @param objectClass 泛型T的class
* @return
* @throws IOException
*/
public static T deserialize(byte[] bytes, Class objectClass) throws IOException {
try (ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes)) {
Hessian2Serialization hessian2Serialization = new Hessian2Serialization();
try {
ObjectInput objectInput = hessian2Serialization.deserialize(null, byteArrayInputStream);
T object = objectInput.readObject(objectClass);
log.debug("反序列化的对象=" + object.toString());
return object;
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return null;
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
1. 消息队列 消息队列是指利用队列这种数据结构进行消息发送、缓存、接收,使得进程间能相互通信,是点对点的通信 而消息代理是对消息队列的扩展,支持对消息的路由,是发布-订阅模式的通信,消息的发送者并不清楚消息的接收者,消息可以被多个消费者接收。 使用消息队列的…