首页 > 其他分享 >“编不下去了!”~如何在泛型方法里获取T的类型?

“编不下去了!”~如何在泛型方法里获取T的类型?

时间:2023-06-03 21:32:52浏览次数:30  
标签:return object 编不 param 获取 IOException 泛型 序列化 throws

我定义了一个hessian2反序列化的工具方法。为了便于使用,使用了泛型。可是遇到了一个问题,其中调用的Hessian2Input#readObject的入参类型是Class实例。那么,怎么获取泛型T的类型呢?

/**
     * hessian2反序列化,得到反序列对象
     * @param bytes 序列化时生成的字节数组
     * @param <T>
     * @return
     * @throws IOException
     */
    public static <T> 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> T readObject(Class<T> cls) throws IOException, ClassNotFoundException;

 

 

揭晓答案↓↓↓

/**
     * hessian2反序列化,得到反序列对象
     *
     * @param bytes       序列化时生成的字节数组
     * @param <T>
     * @param objectClass 泛型T的class
     * @return
     * @throws IOException
     */
    public static <T> T deserialize(byte[] bytes, Class<T> 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;
    }

 



标签:return,object,编不,param,获取,IOException,泛型,序列化,throws
From: https://blog.51cto.com/u_15708799/6408740

相关文章

  • java子线程中获取父线程的threadLocal中的值
    1packagecom.example.springbootstudy.test.threadLocal;23publicclassBaseTest{45publicstaticfinalInheritableThreadLocal<String>inheritableThreadLocal=newInheritableThreadLocal<>();67publicstaticfinalThrea......
  • 如何使用关键词搜索API接口获取到快手的商品
    如果您想使用关键词搜索API接口获取到快手的商品,可以通过以下步骤实现:1.首先注册账号。根据文档申请相应的接口权限。2.确定需要使用的API接口。对于商品搜索,您可以查看相关的API文档以获取参数和请求方法。3.根据API文档中提供的接口地址、参数等信息,发送HTTP请求。您可以......
  • HackBrowserData一键获取浏览器登陆凭证
    HackBrowserData是一个命令行工具,用于从浏览器中解密和导出浏览器数据(密码、历史记录、Cookie、书签、信用卡、下载记录、本地存储和扩展)。它支持市场上最流行的浏览器,并可在Windows、macOS和Linux上运行。免责声明:此工具仅用于安全研究目的。用户对使用该工具所产生的所有......
  • c# winfrom中 dateTimePicker 控件设置自动获取上个月,当月,下个月,前好几个月,后好几个月
    我这里用的是vs2022开发,将获取的时间赋值给dateTimePicker控件进行筛选1、从工具箱中托取一个dateTimePicker控件,我这里将该控件命名为RQ,代码为RQ.value=时间代码2、时间的获取:今天:RQ.Value=DateTime.Now;本月第一天:RQ.Value=DateTime.Now.AddDays(1-DateTime.Now.Day......
  • python扫描proxy并获取可用代理ip列表
    mac或linux下可以work的代码如下:#coding=utf-8importrequestsimportrefrombs4importBeautifulSoupasbsimportQueueimportthreadingimportrandomimportreheaders_useragents=[]headers_referers=[]headers_referers.append('http://www.google.com/?q......
  • vue、js onSelect事件 获取选中的值
    https://huaweicloud.csdn.net/639ff5afdacf622b8df90ecc.html?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~BlogCommendFromBaidu~activity-1-125977595-blog-51669331.235^v36^pc_relevant_default_base3&depth_1-ut......
  • Sysmon 使用查询进程名称获取 DNS 查询日志==》看来早些版本是不支持溯源的!
    浏览器打开的域名: ss的请求:   svchost出去的也有:    系统更新,也是svchost发出去的:   ping的:    nslookup的,看不到:GG!!!    这是一个简单的“pinggoogle.com”命令,导致事件22记录在SysmonWindows事件日志中:它可以监视几乎任何支持网络的Windows客户端软件......
  • Android中实现网络图片的获取
    在Android中要想获取网络资源,可以使用HttpURLConnection和HttpsURLConnection来实现相关功能。下面案例实现了基于URL的简单请求响应,通过HttpURLConnection获取连接,通过InputStream获取输入流,BitmapFactory将数据流转换为Bitmap,再将Bitmap通过线程的Message发送出去,Handl......
  • c++ libcurl获取http header信息
    boolHttpDownloader::GetReceiveHeaderInfo(conststd::string&strUrl,std::map<std::string,std::string>&mapHeaderKeyValue){boolbRet=false;if(strUrl.empty()){returnbRet;}else{CURL*handl......
  • 6、如何获取配置中心的配置
    公众号:java乐园源码:https://gitee.com/hjj520/spring-cloud-2.x/在《配置中心》这一篇博文里学习了如何git获取配置文件。大概的流程可以用下图来概括。《配置中心》这篇博文说的是ConfigServer,本篇将和大家看看如何编写一个ConfigClient从ConfigServer获取配置。1、先在......