如何消除JdbcTemplate查询非空列时的拆箱NPE警告?
消除IntelliJ拆箱空指针警告的方案
已知约束:无法修改jdbcTemplate.queryForObject的注解、不能用@SuppressWarnings、数据库字段保证非空,以下是两种告知IDE返回值非空的方法:
方法1:使用Objects.requireNonNull()包裹查询结果
Objects.requireNonNull()会在参数为null时抛出NullPointerException,同时IDE会识别该方法返回的是非空值,从而消除拆箱警告。代码修改如下:
import java.util.Objects; public int getNum() { int num = 0; try { num = Objects.requireNonNull(jdbcTemplate.queryForObject("select num from mytable", Integer.class)); } catch (EmptyResultDataAccessException ignored) { // ignored not found } return num; }
方法2:使用JetBrains的@NotNull注解标记结果
IntelliJ IDEA原生识别org.jetbrains.annotations.NotNull注解,通过给查询结果变量或强制类型转换添加该注解,可告知IDE此值不会为null。
方式2.1:给临时变量添加注解
import org.jetbrains.annotations.NotNull; public int getNum() { int num = 0; try { @NotNull Integer result = jdbcTemplate.queryForObject("select num from mytable", Integer.class); num = result; } catch (EmptyResultDataAccessException ignored) { // ignored not found } return num; }
方式2.2:强制类型转换时添加注解
无需临时变量,直接在赋值时标注:
import org.jetbrains.annotations.NotNull; public int getNum() { int num = 0; try { num = (@NotNull Integer) jdbcTemplate.queryForObject("select num from mytable", Integer.class); } catch (EmptyResultDataAccessException ignored) { // ignored not found } return num; }
注意:使用此方法需要确保项目中引入了JetBrains注解依赖(如Maven中添加org.jetbrains:annotations:24.0.1)。
内容的提问来源于stack exchange,提问作者Jmeter Tea
相关产品推荐
相关产品推荐

