解决 泛型类型转换出现Unchecked cast: ‘java.lang.Object‘ to ‘T‘怎么解决

news2025/1/12 8:47:36

文章目录

  • 解决 泛型类型转换出现`Unchecked cast: 'java.lang.Object' to 'T'`怎么解决
    • 场景复现
    • 如何解决
    • 如何应用
    • demo案例说明

解决 泛型类型转换出现Unchecked cast: 'java.lang.Object' to 'T'怎么解决

场景复现

自定义工具类,编写公共方法,根据不同日期类型,将毫秒值转换对应的日期类型。Date类型和LocalDatetime类型强制转换泛型T,警告提示

Unchecked cast: 'java.util.Date' to 'T'

image-20230822210931990

/**
 * 毫秒值转换日期
 * @param ms
 * @return
 */
public static <T> T fromMsToDate(long ms, Class<T> clazz) {
    if (ms == 0 || Objects.isNull(clazz)) {
        throw new BusinessException("入参有误,请重新输入");
    }
    if (clazz == Date.class) {
        Date date = new Date();
        date.setTime(ms);
        return (T) date;
    } else if (clazz == LocalDateTime.class) {
        LocalDateTime localDateTime = Instant.ofEpochMilli(ms).atZone(ZoneId.systemDefault()).toLocalDateTime();
        return (T) localDateTime;
    }
    return null;
}

如何解决

在进行类型转换时,如果不确定转换后的类型,就会出现Unchecked cast: ‘java.lang.Object’ to 'T’的警告信息。为了避免这种警告信息,可以使用泛型边界进行限制。

如果要将一个Object类型的变量转换为指定的泛型类型T

/**
 * @description 解决强制类型转换泛型警告问题
 * @param obj 具体类型,object中子类
 * @param clazz class
 * @param <T> 泛型
 * @return 转换泛型
 */
public static <T> T convert(Object obj, Class<T> clazz) {
    if(clazz.isInstance(obj)) {
        return clazz.cast(obj);
    } else {
        return null;
    }
}

这个方法通过一个Class类型的参数来确定泛型类型,并且使用clazz.cast(obj)方法进行强制类型转换,避免了Unchecked cast的警告信息。

如何应用

image-20230822211453255

/**
 * 毫秒值转换日期
 * @param ms
 * @return
 */
public static <T> T fromMsToDate(long ms, Class<T> clazz) {
    if (ms == 0 || Objects.isNull(clazz)) {
        throw new BusinessException("入参有误,请重新输入");
    }
    if (clazz == Date.class) {
        Date date = new Date();
        date.setTime(ms);
        // return (T) date;
        return convert(date, clazz);
    } else if (clazz == LocalDateTime.class) {
        LocalDateTime localDateTime = Instant.ofEpochMilli(ms).atZone(ZoneId.systemDefault()).toLocalDateTime();
        // return (T) localDateTime;
        return convert(localDateTime, clazz);
    }
    return null;
}

demo案例说明

Date date = DateUtil.fromMsToDate(1692414024609l, Date.class);
log.info("date : [{}]" , date);// 2023-8-19 11:0:24

LocalDateTime localDateTime = DateUtil.fromMsToDate(1692414024609l, LocalDateTime.class);
log.info("localDateTime : [{}]" , localDateTime); // 2023-8-19 11:0:24

21:16:29.967 [main] INFO com.geekmice.springbootselfexercise.NoDaoTest - date : [Sat Aug 19 11:00:24 CST 2023]
21:16:29.968 [main] INFO com.geekmice.springbootselfexercise.NoDaoTest - localDateTime : [2023-08-19T11:00:24.609]

image-20230822211711635

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/915582.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

动规算法题:打家劫舍Ⅱ

题目链接&#xff1a;打家劫舍Ⅱ 题目分析 状态表示 从题目分析中可以得知&#xff0c;是有偷和不偷的情况&#xff0c;因此根据做题经验&#xff0c;就使用两个数组来对应着两个情况。 状态转移方程 ①当选择偷第i个位置&#xff0c;那就意味着第i-1个位置的值是不能偷的&a…

手搭手入门MyBatis-Plus

MyBatis-Plus Mybatis-Plus介绍 为简化开发而生 MyBatis-Plus(opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis(opens new window) 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 特性 无侵入&#…

大项与小项

小项 n个命题变元的简单合取式&#xff0c;称作小项&#xff0c;其中每个命题变元与它的否定不能同时存在&#xff0c;但每个命题变元必须出现且仅出现一次。 n个命题变元的小项有2^n个 小项的编码&#xff1a;mi&#xff0c;其中i是使得小项等于1的一组指派的二进制表示。 大项…

英飞凌 Tc3xx AURIX 2G多核处理器简介

目录 1、概述 2、AURIX 2G多核架构 2.1、多核简介 2.2、片上总线简介 3、AURIX 2G内核简介 3.1、内核架构 3.2、内核寄存器 3.3、中断处理 4、AURIX 2G内存简介 4.1、内存简介 4.2、内存映射 1、概述 该产品具备多达六核的高性能架构,每个内核的时钟频率最高可达 30…

基于java+swing俄罗斯方块

基于javaswing俄罗斯方块 一、系统介绍二、功能展示三、其他系统实现五、获取源码 一、系统介绍 项目类型&#xff1a;Java SE项目&#xff08;awtswing&#xff09;非开源 项目名称&#xff1a;俄罗斯方块&#xff08;Tertis) 主要技术&#xff1a;java、awt、swing等技术 …

CSDN首页消息发布文章topSpInfo

Java 这东西就是纯粹的概念&#xff0c;而且很多公司还喜欢拿着这个不停的问。 我们平常写的 Class 就是对象。 New 就是把这个 Class 实例化&#xff0c;实例化啥意思&#xff0c;就是在内存中分配空间呗&#xff0c;不实例化&#xff0c;数据存哪里呀。 这里就是有个奇葩的…

错题整理——测开2021网易

1. 某些bug不影响使用时&#xff0c;可以选择先上线&#xff0c;在维护过程中修复。 2. df&#xff1a;查看磁盘使用情况 dir不是linux的常用的命令&#xff0c;不过用dir能够罗列出目录内容&#xff1b;dir默认没有颜色的区别&#xff0c;但也可以设置。现在都使用ls来代替。…

详细手机代理IP配置

嗨&#xff0c;亲爱的朋友们&#xff01;作为一家代理产品供应商&#xff0c;我知道有很多小伙伴在使用手机进行网络爬虫和数据采集时&#xff0c;常常会遇到一些IP限制的问题。别担心&#xff01;今天我要给大家分享一下手机IP代理的设置方法&#xff0c;让你们轻松应对这些限…

【C++STL基础入门】string迭代器

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、迭代器是什么&#xff1f;二、string迭代器1.定义迭代器理解 2.通过迭代器遍历遍历方式1遍历方式2 3.迭代器失效4.涉及到的迭代函数1、begin()2、end()3、a…

element 图标变颜色和更改大小

需求效果&#xff1a; element自带颜色不符合&#xff0c;且大小不一致。 // 穿透更改图标大小 /deep/ i.el-icon-info{font-size: 20px;} 颜色变化&#xff1a;

SpringCloud学习笔记(三)_服务提供者集群与服务发现Discovery

服务提供者集群 既然SpringCloud的是微服务结构&#xff0c;那么对于同一种服务&#xff0c;当然不可能只有一个节点&#xff0c;需要部署多个节点 架构图如下&#xff1a; 由上可以看出存在多个同一种服务提供者&#xff08;Service Provider&#xff09; 搭建服务提供者集…

基于Python的图书馆大数据可视化分析系统设计与实现

博主介绍&#xff1a;✌csdn特邀作者、博客专家、java领域优质创作者、博客之星&#xff0c;擅长Java、微信小程序、Python、Android等技术&#xff0c;专注于Java、Python等技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; …

u盘数据丢失但占内存如何恢复?不要着急,这里有拯救方案

U盘数据丢失但占内存如何恢复&#xff1f;数据丢失是一种让人非常头疼的问题&#xff0c;尤其是当我们的U盘数据丢失了&#xff0c;但内存仍然被占用时&#xff0c;更令人困惑和焦虑。然而&#xff0c;不要慌张&#xff01;在本文中&#xff0c;将为大家介绍一些有效的方法来恢…

STM32F4X 定时器PWM

STM32F4X 定时器PWM 什么是PWMSTM32F4X PWM使用GPIO引脚复用STM32F4X PWM配置参数定时器PWM输出通道定时器PWM输出模式定时器PWM有效电平定时器PWM工作过程定时器PWM频率计算 STM32F4X PWM配置步骤STM32F4X PWM配置函数 上节说到了定时器的定时功能&#xff0c;这节说一下定时器…

10种最流行的3D模型文件格式及转换方法

3D 文件格式用于存储有关 3D 模型的信息。 你可能听说过一些最流行的格式&#xff0c;包括 STL、OBJ、FBX 和 DAE。 它们广泛应用于从视频游戏动画到工业增材制造的各种应用中。 在本文中&#xff0c;我们将考虑为什么有这么多不同的格式&#xff0c;探讨 3D 文件格式存储的四…

已解决W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library ‘c

已解决W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library ‘cudart64_110.dll’; dlerror: cudart64_110.dll not found I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not ha…

C++ 二叉搜索树的概念特性

1. 二叉搜索树 1.1 二叉搜索树概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树 &#xff0c;或者是具有以下性质的二叉树 : 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值 若它的右子树不为空&#xff0c;则右子树上所有节点的值都大…

华为云部署JDK环境

一、确定系统内核 在下载jdk之前要先确定自己的内核是什么版本&#xff0c;因为我选的云服务器是CentOS7&#xff0c;所以一定是Linux_86_64版本。 若不确定可以在命令行中输入“uname -a”来查看系统内核。 二、下载JDK 到官网下载对应统信系统版本的jdk安装包 jdk官网&…

Java进阶(5)——创建多线程的方法extends Thread和implements Runnable的对比 线程池及常用的线程池

目录 引出创建多线程的方法Thread类创建多线程Runnable接口创建多线程Thread类的常用方法两者的对比 线程池是啥&#xff1f;为啥用&#xff1f;结合案例理解常用的线程池继承Runnable接口的工人实体类newSingleThreadExecutor&#xff08;单线程&#xff09;newFixedThreadPoo…

Simulink仿真模块 - Clock

Clock&#xff1a;显示并提供仿真时间 库&#xff1a; Simulink / Sources 模型为&#xff1a; 说明 Clock 模块在每个仿真时间步输出当前仿真时间。此模块对需要仿真时间的其他模块非常有用。 当在离散系统中需要当前时间时&#xff0c;请使用Digital Clock模块。 实例 模块…