Java 踩坑记录

Java线上惨痛踩坑记录,你也一定遇到过 线上问题年年有,今年特别多。记几次线上惨痛的踩坑记录,希望大家以史为鉴。 如果调用上面的方**发生什么?id是Integer类型,而方法的返回值int类型,会自动拆箱转换,由于id是null,转换成int类型的时候,就会报NullPointerException异常。无论是《阿里Java开发手册》、《代码整洁之道》还是《Effective Java》都建议方法返回值类型尽量写成包装类型,类似Integer。还有实体类、接收前端传参类、给前端的响应类中的属性都要写成包装类型,避免拆箱出错。先看一段代码运行 阅读详情

1、Java Stream:java.lang.IncompatibleClassChangeError: vtable stub

问题代码:

import com.google.common.base.Functions;

Map<Long, Item> itemMap = itemList.stream().collect(Collectors.toMap(Item::getId, Functions.identity()));

问题原因:

Functions是com.google.common.base包中的类,使用了错误的类方法。

解决办法:

使用正确的java.util.function包中的Function类(注意:Function后面没有s),代码如下:

import java.util.function.Function;

Map<Long, Item> itemMap = itemList.stream().collect(Collectors.toMap(Item::getId, Function.identity()));

2、Java 包装类:java.lang.NullPointerException

问题代码:

/*
 * 属性定义:Integer age;
 * 代码说明:当age为无效值时(age==null或age==0),统一返回null值;否则,返回age实际值。
 */
item.getAge() == 0 ? null : item.getAge();

问题原因:

Integer包装类在遇到操作符==时,会先进行拆箱操作,然后获取实际数值进行比较;

当原包装类属性为null时(age==null),拆箱操作导致NullPointerException异常。

解决办法:

先进行Null值检测,再进行数值比较,代码如下:

(item.getAge() == null || item.getAge() == 0) ? null : item.getAge();

3、服务端返回数值正确,但浏览器显示错误:

问题原因:

不同浏览器对数值长度有不同的限制,导致数值会被截取掉部分内容(后面部分二进制位1变成0),最终显示错误。

解决办法:

目前没有找到根本解决方案,临时方案是提供String类型字段,将长数值以字符串类型返回给前端展示。

Java 线上惨痛踩坑记录,你也一定遇到过 每一次踩坑,背后都有至少一次的线上问题记录,这些总结都是用教训换来的,不只是自己,其他人肯定也遇到过。我们如何才能避免在以后的开发中再出现类似的问题呢?站在使用者的角度,编写详细的单元测试,打印必要日志,追踪代码执行结果站在创造者的角度,探究框架的架构设计和源码实现,理解作者的意图你在线上还踩过那些坑? 阅读详情

相关推荐

nested exception is java.lang.IncompatibleClassChangeError: Implementing class(已解决)

目录 小兄弟的项目出现以下报错,帮忙给查了查,已解决。 一、开发工具中排查排错解决 二、Tomcat部署后排查排错解决 三、总结发言 小兄弟的项目出现以下报错,帮忙给查了查,已解决。 一、开发工具中排查排错解决 org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.IncompatibleClassChangeError: I...

【优快云】 3355

解析java.lang.IncompatibleClassChangeError错误

错误表示类的定义发生了不兼容的更改。本文介绍了该错误的含义、特征和可能的原因。我们提供了一个具体的代码示例来演示该错误的发生情况,并提供了解决方案和预防措施来解决和避免此错误的发生。解决错误是Java开发中的一个重要任务,因为它可能导致程序的不可预测行为和崩溃。通过理解错误的原因和采取适当的解决方案和预防措施,我们可以有效地处理这个错误,并确保我们的代码在运行时是稳定和可靠的。

博客 5999

Android车载应用开发与分析(11)- 车载Android应用开发入门指南

将时间回退到2017年我大学刚毕业时,彼时移动互联网就已经开始退潮,各大个培训机构也纷纷停止了Android相关的培训,曾经热火朝天的应用开发从那时起,就开始走向下坡路,小程序以及众多跨平台框架也让市场对Android原生开发的需求逐年降低,市场需求的降低也造就了Android开发的面试变得史无前例的“卷”。 终于我在2019年选择离开了互联网,投身当时还不是非常火热的车载Android领域继续从事Android原生开发。而这一年中国首个外商独资的整车制造项目,“...

linkwj的博客 1万+

已解决java.lang.IncompatibleClassChangeError: 不兼容的类变更错误异常的正确解决方法,亲测有效!!!

已解决java.lang.IncompatibleClassChangeError: 不兼容的类变更错误异常的正确解决方法,亲测有效!!!

小明的Java问道之路 4115

扫地机器人视觉+IMU融合导航路径规划技术详解

本文介绍了基于视觉-惯性里程计(VIO)的扫地机器人自主导航系统。系统硬件由RGB摄像头、IMU传感器和编码器组成,软件架构采用分层设计,包括传感器数据采集层、数据融合层、SLAM定位层和路径规划层。核心技术包括:1)融合视觉特征提取(ORB算法)与IMU预积分的VIO;2)基于栅格地图的SLAM构建;3)结合A*全局规划和动态窗口法(DWA)局部避障的路径规划。文章提供了完整的Python实现代码,涵盖传感器数据融合、特征匹配和运动估计等关键功能模块。该系统实现了扫地机器人的精准定位和环境感知能力。

电脑管家 1463

手把手教你用Multisim搭建FM直接调频电路(附完整波形分析)

本文通过Multisim仿真软件,手把手教你搭建FM直接调频电路。详细介绍了从核心概念理解、压控振荡器(VCO)参数设置、电路搭建与波形观测,到带通滤波器设计与信号优化的完整流程。通过对比滤波前后的时域波形与频谱分析,帮助读者直观理解频率调制原理,并提供了常见问题的排查思路与参数调试方法,将抽象的通信理论转化为可操作的实践技能。

weixin_29230773的博客 214

Java语言本身的一些基础知识

一些java基础知识

master-dragon的专栏 2635

BBR算法原理与实现深度解析

BBR算法通过重新定义拥塞控制的基本范式,为现代网络应用提供了突破性的解决方案。随着QUIC协议的普及和智能网卡技术的发展,BBR类算法将在边缘计算、云游戏、工业物联网等领域发挥更重要的作用。

程序猿老樊的博客 2418

项目启动报错:java.lang.IncompatibleClassChangeError: vtable stub

项目启动报错:java.lang.IncompatibleClassChangeError: vtable stub

weixin_49114503的博客 578

Python爬虫实战:利用Selenium与Playwright抓取美团外卖数据

在当今大数据时代,网络数据采集已成为商业分析和市场研究的重要手段。本文以美团外卖平台为例,详细介绍如何使用Python最新爬虫技术(Selenium、Playwright)进行数据采集,并探讨相关技术原理、反爬应对策略及数据存储方案。通过5000+字的详细讲解和完整代码示例,帮助读者掌握现代网络爬虫开发的核心技能。本文详细介绍了使用Python最新爬虫技术采集美团外卖数据的完整流程,涵盖了从环境配置、页面分析到数据存储的全链路解决方案。

2201_76125261的博客 2550

12、知识图谱数据处理与推理全解析

本文深入解析了知识图谱中的数据处理与推理技术,涵盖SHACL的多种约束类型(如值约束、范围约束、字符串约束、逻辑约束等)及其在数据质量控制中的应用,并介绍了常用的SHACL工具与实际案例。文章对比了SPARQL与SHACL的特点,探讨了RDF(S)的局限性,引出表达能力更强的OWL和OWL2语言及其在语义网和生物医学等领域的应用。此外,还阐述了规则在知识表示中的作用,包括产生式规则和Datalog规则,并总结了知识图谱中推理的重要性与典型流程,为构建高质量、可推理的知识图谱提供了全面的技术指导。

zz67890的博客 136

Java踩坑记录

【代码】Java踩坑记录。

chengxuyuan_zysg的博客 415

[PCIE5.0] 2.2.8.9 Optimized Buffer Flush/Fill (OBFF) Message

这段文字讲解的是 优化的缓冲区清空/填充(OBFF)消息,它是 PCI Express(PCIe)规范中的一个可选功能,用于向设备报告平台中央资源的状态。简单来说,OBFF 主要帮助设备了解当前平台资源(如缓存或内存)的状态,从而优化数据的处理和传输。这章重点内容如下。

系统固件工程师 538

java踩坑记录

【写在前面】:有坑多分享,大家少踩坑 1,split要做空判断,要不。。。。。 2,eclipse中的java-install一定要指向jre而不是jdk,虽然不会报错,但是会缺包报错,而且网上神仙多,各种处理方案。 标志性报错: Caused by: javax.xml.bind.JAXBException 最终处理:全部用jdk1.7不行,用jdk1.8就可以。 3...

qq_32507509的博客 597

【异常】came as a complete surprise to me,IllegalArgumentException: The template string is not valid.

是Spring AI中用于生成提示词(prompt)的一个类。提示词对于与大语言模型交互至关重要,因为它们指导模型生成特定类型的响应。允许开发者创建包含占位符的模板字符串,并通过提供具体的值来填充这些占位符,从而动态地生成个性化的提示词。

奶爸的编程之路,也就一周冷个三天 748

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

JAVA踩坑记录

为什么要记录坑呢? 为了更好的再次相遇

Had的博客 212

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java内省踩坑记录

Java内省踩坑记录 1.背景描述 有个功能需要将yml的内容转成一个POJO。但是在项目启动时出现了报错。 问题现场 yml文件内容: xField: "time" yField: "total_pct" pojo定义: @Data public class ChartBean { private String xField; private String yField; } 启动方法: public class ChartYmlConf...

徐二七的博客 1212

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

java1.8升级Java17踩坑记录

java1.8升级Java17踩坑记录

寂夜了无痕的博客 2575

Java List踩坑记录

关于集合,先看下面这张框架图,可以清晰的看到,整个集合主要包含两大块: Collection和Map,其中Collection接口是一个单列集合,用来存储一个一个的对象,Map接口是一个双列集合,用来存储一对(key - value)一对的数据。接下集合部分主要就分析这两个部分(不会详细讲集合中公有的方法,主要介绍几个实现类的区别和接口的区别)。 Collection The root in...

走不动的木木 630

Java中调用Python方法总结及踩坑记录

Java中调用Python方法总结及踩坑记录,包含Cannot create PyString with non-byte value;ImportError: No module named xxx等报错的解决方法

wzc3614的博客 2710
上一篇: Git:分支管理
下一篇: 后端项目结构管理
崔显龙
博客等级 码龄15年 95粉丝 64原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值