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

VMware player桥接模式不能联网的解决方法

VMware虚拟机下主要使用两种网络连接方式:桥接模式、NAT模式。 桥接模式:查一下,虚拟机独立IP。 NAT模式:与电脑共享IP、需要映射应用服务的端口。 我的需求需要独立IP,于是使用桥接。 网络连接失败。 个人主机系统的网络设置: 设置 - 网络和 Internet - 更改适配器设置 给虚拟机设置网络适配器 只保留,点击确定,确定。 重新运行虚拟机。 ...

Mark_md的博客 9450

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

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

小明的Java问道之路 4115

WS2812B非标准通信协议:手把手实现精准时序控制

详解WS2812B的精准时序实现原理,剖析其非标准通信协议的关键细节。通过实际操作指导,帮助开发者稳定驱动ws2812b灯带,解决常见时序偏差问题,提升项目显示效果与响应一致性。

weixin_42584586的博客 587

Win10系统VS2019+Cmake+qhull_8.0.0环境配置

1 qhull 1.1 简要介绍 qhull是一个强大的计算几何库,可以用于计算高维的convex hull, Delaunay triangulation, Voronoi diagram等。 1.2 依赖库 qhull不依赖其他库。 1.3 源码包下载 qhull源码地址:github:https://github.com/qhull/qhull.git 2 Cmake构建项目 2.1 路径 源代码路径:D:/ThirdParty/qhull/qhull_8.0.0构建项目路径:D:/Thi.

wangchenxue的博客 2492

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

一些java基础知识

master-dragon的专栏 2635

使用libx265对YUV进行h265编码

使用libx265对YUV进行h265编码

Embedded engineer 3079

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

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

weixin_49114503的博客 578

rk3588主板PDM接口接数字MIC录音

本文介绍了Rockchip 3588平台上6麦克风PDM接口的硬件连接与软件调试过程。硬件方面展示了PDM0_CLK0_M0时钟脚和三组数据脚的连接方案。软件配置包括设备树修改,生成声卡节点,并提供了6通道录音命令示例。文章重点分析了两个常见问题:录音无声(需检查供电、接线和波形)和通道数据缺失(需正确配置rockchip,path-map寄存器映射)。最后通过Audition工具验证录音文件,确认各通道工作正常。调试过程完整展现了从硬件连接到软件配置的完整流程。

m0_60805802的博客 1014

AI预测彩票,使用chatgpt和lstm神经网络(文末附源码)

AI预测彩票,使用chatgpt和lstm神经网络(文末有彩蛋)

淘淘小窝 1万+

Java踩坑记录

【代码】Java踩坑记录。

chengxuyuan_zysg的博客 415

嵌入式开发工程师笔试面试指南-Linux驱动

linux驱动

weixin_43491077的博客 473

java踩坑记录

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

qq_32507509的博客 597

JavaSwing_1.1: FlowLayout(流式布局)

FlowLayout,流式布局管理器。按水平方向依次排列放置组件,排满一行,换下一行继续排列。

谢TS的博客 7万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

JAVA踩坑记录

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

Had的博客 212

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

Statistics and Machine Learning Toolbox

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

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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、付费专栏及课程。

余额充值