java类型强转,自己不能转换成自己

Apollo MPC横纵向耦合控制学习笔记 Apollo MPC横纵向控制原理学习笔记 阅读详情

java类型强转,自己不能转换成自己

产生背景

使用SpringBoot 集成Quartz框架,项目启动时报错:

2020-08-12 13:49:13.003 ERROR 8512 --- [eduler_Worker-3] org.quartz.core.JobRunShell              : Job test-group.test threw an unhandled Exception: 

java.lang.ClassCastException: cn.bupt.zcc.dynamicquartz.model.ScheduleJob cannot be cast to cn.bupt.zcc.dynamicquartz.model.ScheduleJob

我眯着眼睛瞅了几遍,并在项目中进行全局搜索,确定类限定名是完全一致!一时想不出啥原因,于是寻求度娘帮助,找到了这篇博文,参考链接: link.
Java 中,判断两个类型是否相同需要:1.两个类有相同的限定名;2.两个类由同一类加载器实例加载。既然类限定名是没有问题的,那么只能说明要强转成的 TypeA 和从 memcached 中取回的 TypeA(Java 标准反序列化生成的实例的 class)不是由同一类加载器实例加载的。后来查了一下,果不其然,同事写的那段逻辑是用 spring-devtool 启动的,而 spring-devtool 自己实现了一个类加载器,这个类加载器默认加载所有自己写的 Java 代码编译出来的 .class (也就是非 .jar 中的 .class),加载要强转为的 TypeA 就是由他加载的。而 memcached 中取回 TypeA 这块的逻辑是在 .jar 中封包的,这部分是由 AppClassLoader 加载的。这样就造成了同样是 TypeA,由不同类加载器实例(别提实例了,类加载器的类都不同)加载出来的情况,因此,他们虽然名字一样,但是已经不是一个类了,所以不能强转成功了。
发生错误时的代码:

package cn.bupt.zcc.dynamicquartz.job;

import cn.bupt.zcc.dynamicquartz.model.ScheduleJob;
import cn.bupt.zcc.dynamicquartz.service.QuartzService;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Service;

/**
 *
 *
 * @author: Even
 * @create: 
 **/
@Service("quartzJobFactory")
public class QuartzJobFactory extends QuartzJobBean {

    @Autowired
    QuartzService quartzService;

    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
      //  ScheduleJob object = (ScheduleJob) jobExecutionContext.getMergedJobDataMap().get("scheduleJob");
        /**
         * 自己不能强转成自己我是没想到的
         */
        ScheduleJob object = (ScheduleJob) jobExecutionContext.getMergedJobDataMap().get("scheduleJob");
        if(object.getMethodName()==null || object.getMethodName().equals("")){
            quartzService.executeTask(object.getBeanName());
        }else {
            quartzService.executeTask(object.getBeanName(),object.getMethodName());
        }
    }
}

jobExecutionContext.getMergedJobDataMap().get(“scheduleJob”);得到PostgreSQL数据库bytea的job_data字段反序列化出来的对象和SpringBoot devtools 加载的ScheduleJob 不是同一个类的实例

解决方法

不使用Springboot devtools,将其在pom.xml中注释掉

<!--<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
            <scope>true</scope>
        </dependency>-->

重启项目,不再报ClassCastException了

华为OD机试真题 新系统2026-04-01 Python&JS 实现【勇攀数字高峰】 请你在给定的数字地形图中寻找登山路径,数字代表当前位置的海拔高度,要求从最低海拔出发,不断攀登,最终到达最高山峰。你需要寻找所有满足条件的登山路径。地图已经保证最低海拔和最高山峰都只有一个。 阅读详情

相关推荐

SpringBoot不用三方框架,怎么动态调度定时任务,ScheduledExecutorService 详解

Spring Boot 提供了强大的定时任务支持,无需依赖任何第三方框架,即可轻松实现可配置的定时任务。通过使用 `@EnableScheduling` 注解启用定时任务支持后,我们可以利用 `@Scheduled` 注解来定义定时任务的方法,这些方法可以在指定的时间间隔或特定时间点自动执行。 我们还可以通过集成 `ScheduledExecutorService` 来实现灵活的定时任务管理。`ScheduledExecutorService` 是 Java 标准库的一部分,能够以固定速率或延迟执行任务,

横竖撇折点 1937

java.lang.ClassCastException 同包同类名强转异常

目录问题解决 问题 今天碰到了一个很诡异的问题,有一段代码在执行强转时居然提示自己不能转自己,还真的是头一回碰到这种问题,代码及异常如下 ComplexOrderDbShardingAlgorithm complexOrderDbShardingAlgorithm = (ComplexOrderDbShardingAlgorithm) ReflectUtil.getFieldValue(dataBaseShardingStrategy, "shardingAlgorithm"); complexOrderD

吴码 980

NLM去噪算法:原理、优化与医学图像处理实战

本文深入解析NLM去噪算法的核心原理及其在医学图像处理中的优化应用。通过全局自相似性计算,NLM算法有效抑制噪声并保留细节,特别适用于超声图像斑点噪声处理。文章还介绍了积分图像和傅里叶变换等优化技巧,显著提升计算效率,并分享医学影像项目中的实用调参经验。

weixin_29051149的博客 344

父子类强转失败 类加载器隔离问题

今天遇到一个BUG 在做调试的时候发现子类不能强转父类。。 DEBUG一下 发现 instanceof 结果是false 回想一下 在Oracle的时候驱动有两个版本 都是自定义类加载器去加载驱动(为了区分Oracle版本) ...

wwq_vracle的博客 669

别再瞎猜了!三角形接法PMSM的相电流到底怎么算?实测线电流转换公式与避坑指南

本文深入解析三角形接法永磁同步电机(PMSM)在FOC控制中的相电流计算误区,提供实测线电流转换公式与避坑指南。针对矢量控制系统中常见的√3换算错误,详细阐述正确的电流重构算法、硬件采样要点及软件优化技巧,帮助工程师实现精确控制并避免电机损坏。

weixin_30367873的博客 465

Cursor 团队代码规范与开发规则

本文提出了一套 Cursor 项目开发规范,涵盖代码结构、命名、日志、测试等关键环节,旨在提升代码质量和团队协作效率。核心规则包括:文件不超过2000行、函数不超过80行;变量命名禁用无意义单词;日志只记录关键信息;配置项禁止硬编码;依赖和敏感信息统一管理;核心逻辑测试覆盖率≥80%;Git提交遵循Conventional Commits规范。通过一个车辆数据处理函数的改造案例,展示了从"不规范"到"规范"的代码优化过程,体现了拆分函数、常量管理、错误处理等规范的实际

1255

记一次JDK类加载强转错误

背景 业务需要在运行时动态加载class文件,并注册到spring bean中。由于JDK的类加载会拿到Object实例,所以要用到强转类型。 加载例子 一般见网上的例子即可,本例使用a.class,定义一个cn.demo.MyDemo类,继承于IDemo接口。 public class MyDemo implements IDemo { @Overided public String show() { System.out.println("YES"); } } 在Main方法中,强转后使用s

Wilson的博客 469

RK3568 低功耗设计全解析:DVFS 策略与 PMIC 电源管理

本文深入解析RK3568处理器的低功耗优化方案。从硬件架构分析入手,阐述四核Cortex-A55的功耗特性及分层电源域设计。重点介绍DVFS动态调压调频技术,包括Linux内核配置方法及场景化策略设计。详细讲解RK809 PMIC的电源管理优化,提供外设电源域控制与休眠唤醒配置的实战案例。通过智能终端应用实例,展示待机功耗从280mA降至65mA的优化效果,并推荐功率测试工具。文章强调需要平衡性能与功耗,结合场景定制策略,并指出AI负载预测等未来优化方向,为RK3568开发者提供系统性的低功耗解决方案。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2073

类型强转时报错:java.lang.ClassCastException 两个一样的类不能强转

【代码】类型强转时报错:java.lang.ClassCastException 两个一样的类不能强转。

weixin_42001360的博客 758

【PyTorch】CNN(一维卷积Conv1D)实现时间序列预测

本文介绍了一维卷积神经网络(Conv1D)在时间序列预测中的应用,展示了其基本原理及实现方式。通过合适的数据预处理和模型调参,Conv1D可以有效地捕捉时间序列数据中的模式,从而进行精准预测。

走向CTO的路上... 1172

猿创征文|Qt 文件和目录应用讲解【QCoreApplication】【QFile、QFileInfo】【QTemporaryDir和QTemporaryFile】【QDir】【QFileSyste】

Qt 文件和目录精准讲解【QCoreApplication】【QFile、QFileInfo】【QTemporaryDir和QTemporaryFile】【QDir】【QFileSyste】【QFileDialog】 第一章 QCoreApplication类 第一节 QCoreApplication常用函数方法 第二节 QCoreApplication举例 第二章 QFile类 第一节 静态函数方法 第二节 成员函数方法 第三章 QFileInfo类 第一节 常用函数方法 第四章 QDir类

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 941

类加载器不同导致类型强制转换报错:java.lang.ClassCastException

直接看如下错误例子 com.hotload.Test cannot be cast to com.hotload.Test,因为com.hotload.Test的类加载器是MyComOtherClassLoader,而非默认的 sun.misc.Launcher$AppClassLoader 如下则正常

master-dragon的专栏 2556

SOC估算方法之(OCV-SOC+安时积分法)

此方法主要参考。

m0_61973119的博客 933

springboot 出现两个相同的类强转类型报错 java.lang.ClassCastException

springboot 出现两个相同的类强转类型报错 java.lang.ClassCastException今天出现了一个令我感到惊奇的问题是时候打破常规了 今天出现了一个令我感到惊奇的问题 Java 强转类型,相信大家并不陌生,通常来说,强转类型都是我们知道这个类可以转换成另一个类,可能是他的父类或者是他的同类,这样转换一般来说千百年都不会出错。例如下面的 //Father 是 son 的父类...

Diego的专栏 5763

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Java基础_引用数据类型的强制类型转换

在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需要强制转换。因为子类拥有比父类更多的属性、更强的功能,所以父类转换为子类需要强制。那么,是不是只要是父类转换为子类就会成功呢?其实不然,他们之间的强制类型转换是有条件的。 当我们用一个类型的构造器构造出一个对象时,这个对象的类型就已经确定的,也就说它的本质是不会再发生变化了。在Java中我们可以通过继承、向上转型的...

AN_ERA的博客 6252

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java初认识--基本数据类型(int 和byte之间赋值)默认值 类型强转

主类和主方法 Test.java–是源文件,源文件必须与主类名(public class )保持一致,一个源文件只能有一个主类 ,主方法存在与主类中。 Test.java 源文件 主类:public class Test 主方法 : public static void main(String[] args) Java程序编译–执行流程 编译:javac Test.java —&amp;amp;amp;gt;Te...

sophia__yu的博客 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

java类型强转_java强制类型转换

在Java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能。本文将对常用的转换方法进行一个总结。常用的方法有Object.toString(),(String)要转换的对象,String.valueOf(Object)等。下面对这些方法一一进行分析。方法1:采用 Object.toString()方法请看下面的例子:1 Object object = getObject();...

weixin_33269198的博客 3492

JAVA中Long类型转换为int类型

由int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出情况: 主要以下几种转换方法,供参考: 一、强制类型转换 [java] long ll = 300000; int ii = (int)ll; 二、调用intValue()方法 [java] long ll = 300000; int ii= new Long(ll).i...

weixin_42913025的博客 7357

多态性,强转,instanceof运算符

多态性,强转,instanceof运算符 多态性 概述:JAVA引用变量有两种类型,一种是编译时的类型,一种是运行时的类型,如果编译时的类型和运行是的类型不一样,就可能出现多态。 请看如下代码 package myeclipse; class Fruit{ public String base="水果"; public void show() { System.out.println("...

weixin_43328054的博客 224

既然java强转会有空指针异常,为啥idea不提示让我用 String.valueOf 包起来,而是提示我用 (String) 强转。

我到底什么时候用强转,什么时候用 String.valueOf?有没有两全其美的写法?这里给你一个「万能使用准则」,按场景选择即可,覆盖 100% 的业务需求,绝对不会出错→必须用java运行// 比如:接收一个任意类型的参数,需要转成字符串展示// ✅ 最优解,兼容所有类型,永不报错强转不会抛空指针,空指针是「null 调用成员方法」导致的,不是强转的问题;强转是「类型断言」,零开销、语义精准;是「值转换」,有开销、兼容性强,二者语义不同、结果可能不同,不是等价写法;

qq_41577703的博客 801

Java中将对象转换成String的三种方法

String,toString,String.valueOf

WgRui的博客 2万+

Long类型的数据转换

Java中基本的关于Long类型的转换、在网上查询到的资料多半都是通过类型的强转进行转换的但是在有些特殊的时候强转会失败long数据类型是64位有符号Java原始数据类型,当对整数的计算结果可能超出int数据类型的范围时使用,long的范围内的所有整数称为long类型的整数字面量, long类型的整数常数总是以L或小写l结尾。以上这些方法是自己搜索的时候根据他人文章进行总结的并非原创勿以此作文章,写该文章的起因作为自己的日志而已。

qq_35064390的博客 5426

Map<String,Object>接收参数,Long类型降级为Integer,报类型转换异常

前言 今天看群里小伙伴问了一个非常有意思的问题: 使用 Map<String,Object> 对象接收前端传递的参数,在后端取参时,因为接口文档中明确该字段类型为 Long ,所以对接收的参数进行了强转,即 (Long)参数 ,但是却发生了类型转换异常,报错信息如下: class java.lang.Integer cannot be cast to class java.lang.Long (java.lang.Integer and java.lang.Long are in modul

niceyoo的博客 4689

【java基础】多态、编译类型、运行类型、强制类型转换、动态绑定关系梳理

其实上面这些东西说白了都是一个东西,就是对象调用方法会根据实际运行类型来开始查找方法进行调用,找不到再去父类查找。父类可以引用子类对象,我们只能将对象强转为对象的实际的运行类型或者对象运行类型的父类。

秃头披风侠的博客 826

java中int类型强转char类型详解!!!!(超级详细!!真的!!!)

part 1 .问题的由来:老师上课布置了这样一道题,“char m=(int)a,请问这个a输入怎样的一个负整数才能使m在按照字符格式输出时,输出 'b' ?” part 2. 预备知识: ①在java中,int类型是占用4字节,即32位二进制,按照补码形式存储;char类型是2字节,即16位二进制,按照原码形式存储。(因此int类型是要比char类型多16位的,这就会产生一个数值位丢失的问题...嘶~如何解决?) ②多了16位,那就丢16位嘛。当int类型强转位char类型时,会将该变量(或者是立

weixin_53379019的博客 4289

Java中Object类型是带有小数点的浮点数如何转换成整型

 给定 ,将t转换成整型int或者long  错误1:强转  错误2: 转换成字符串,再用Integer.parseInt()转换成int  正确方式: 强转成Double类型,然后调用Double类中的intValue()

tanxinji的博客 1876
上一篇: ubuntu安装curl遇到的问题
下一篇: Android Studio插件市场无法加载出来
Even_Chou_Even
博客等级 码龄8年 5粉丝 16原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值