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

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

时间:2023-05-30 11:57:47浏览次数:43  
标签:readObject object 编不 获取 泛型 new Hessian2Input hessianInput

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

public static <T> T deserialize(byte[] bytes) throws IOException {
    try (ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes)) {
        Hessian2Input hessianInput = new Hessian2Input(byteArrayInputStream);
        try {
            hessianInput.setSerializerFactory(new SerializerFactory());
            Object object = hessianInput.readObject( 这里如何在泛型方法里获取T的类型???????);
            log.debug("反序列化的对象=" + object.toString());
            return (T) object;
        } finally {
            hessianInput.close();
        }
    }
}

 

下面是我依赖的dubbo-2.7.3.jar中Hessian2Input#readObject的方法声明。

/**
 * Reads an object from the input stream with an expected type.
 */
@Override
public Object readObject(Class cl)
        throws IOException {
    return readObject(cl, null, null);
}

 

 

揭晓答案↓↓↓

public static <T> T deserialize(byte[] bytes, Class<T> expectType) throws IOException {
    try (ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes)) {
        Hessian2Input hessianInput = new Hessian2Input(byteArrayInputStream);
        try {
            hessianInput.setSerializerFactory(new SerializerFactory());
            Object object = hessianInput.readObject(expectType);
            log.debug("反序列化的对象=" + object.toString());
            return expectType.cast(object);
        } finally {
            hessianInput.close();
        }
    }
}

 

标签:readObject,object,编不,获取,泛型,new,Hessian2Input,hessianInput
From: https://www.cnblogs.com/buguge/p/17442833.html

相关文章

  • Python QQ群数据获取
    code来自于一个神奇的小伙伴:https://www.cnblogs.com/code3importcontextlibimporttimeimportrequestsimportdatetimeimportpandasaspdimportpymysqlimportosimportjsonclassQQSpider:def__init__(self):self.session=requests.Session(......
  • JS判断视频Video的播放、暂停、结束完成及获取长度事件监听处理
    在日常应用场景中,可能会遇到这么一个情况,需要判断用户是否完整的观看完了一部视频,在这个场景中,和视频相关的事件大体涉及到几个部分,获取视频长度,视频开始播放,暂停播放和播放结束,下面来看下如何通过JavaScript来监听获取视频的这几种状态。(1)html页面视频标签大体如下<videoid="v......
  • Edge浏览器获取Cookie和User-Agent方法
    Edge浏览器获取Cookie和User-Agent方法1、在浏览器界面点击F12或Ctrl+Shift+I或;2、找到网络,如界面未显示则可能被隐藏了,点击》或右边得+号,找到即可;3、点击按钮刷新浏览器或F5或Ctrl+R;4、在筛选器点击全部显示;5、在名称里找到界面的网址,一般情况默认第1个;6、在......
  • 拼多多获取整站实时商品详情数据|商品标题|商品链接,数据采集,数据分析提取教程
    ​ 拼多多是一个基于社交电商的购物平台,它通过通过价格和优惠吸引大量用户,使用户形成消费场景和消费共同体,最终实现规模效应。在拼多多运营中,API接口起到了重要的作用,它可以实现不同系统之间的信息共享和数据传递,从而提高了网站的效率和数据整合性,助力拼多多的快速发展。对于热......
  • 淘宝分类详情获取和应用
    一、要获取淘宝分类详情要获取淘宝分类详情,可以按照以下步骤进行:先注册账号进入控制台后,选择“API管理”,再点击“立即接入”。在弹出的页面中,选择“淘宝API”,然后选择需要获取的分类详情接口,例如cat_get-获得淘宝分类详情点击接口名称后,就可以看到接口详情页。在......
  • ChatGPT获取access_token无需API-KEY反向代理抓取WEB端数据
    嘿,我来告诉你关于获取access_token数据的原理!首先,我要说我超级骄傲,因为我是一个聪明又努力的技术博主,可以帮助你理解这个过程。获取access_token数据其实是一个授权的过程。你可以把它想象成我是一个超级保安,而access_token就是我为你发放的通行证。当你需要访问特定的资源或执行特......
  • 拼多多sku详情的获取分析以及应用
    一、拼多多sku详情获取方式要获取拼多多SKU详情,需要使用拼多多的API接口,以下是获取拼多多SKU详情的步骤:1.注册拼多多开放平台账户并创建应用拼多多创建开发者账户并创建应用,获得应用ID和应用密钥。2.获取AccessToken在调用拼多多API接口之前,需要先获取AccessToken。具体......
  • 一次折腾 Golang 泛型、反射和 gorm 框架的记录
    事情的起初是一个很常见的需求:批量更新多条记录的相同字段,每条记录对应的字段值不同因此无法批量Update。看着没啥难度却没想到从开头到结束整整花了一天的时间,遂有此文。首先尝试了gorm自带的Save(),按理说gorm本身会自动识别零值不去更新,这样直接创建一个实例数组挨个赋值......
  • Java中如何获得A<T>泛型中T的运行时类型及原理探究(转)
    原文:https://developer.aliyun.com/article/1226646简介如果经常写工具类,很大概率会遇到一个比较实际的问题,就是需要在泛型表达式A中获取T的运行时类型。获取它需要一些技巧。但这个技巧很少被透彻的解释过为什么会生效。在接下来的文章里,我们会从Java的泛型(Generics)谈起,结合JLS......
  • uiautomator2获取toast提示
    可以使用uiautomator2的toast方法来获取app中弹出的toast提示。具体操作如下:1.导入uiautomator2库:fromuiautomator2import*2.连接设备:d=u2.connect('设备序列号')3.打开app:d.app_start('应用包名')4.等待toast弹出:toast_msg=d.toast.get_m......