java - Java 在将 Integer 作为参数传递时隐式调用 intValue
问题描述
所以我遇到了由以下示例引起的错误:我有静态方法
private static Foo findFoo(int id) {
//we use id here not important
}
然后我在另一种方法中使用它
private static updateFoo(final Integer id, final String newData) {
final Foo existingData = findFoo(id);
// use existing data and update or make new
}
问题是在参数中updateFoo
调用时,调用时隐式调用(我认为)并导致NPE。null
id
intValue()
findFoo(id)
我认为 Java 强制执行强类型,以防止在预期原语时将对象传递给参数的情况。进行隐式调用时,这里有一般规则吗?这是否可以被编译器/IDE拾取并可能强制执行或警告?
解决方案
如果您使用包装类作为其原始对应部分,则总是会发生这种情况。int
不能为空,因此您必须调用intValue()
包装类。
您可以在调用之前进行空值检查,也可以findFoo()
只使用原语int
forupdateFoo()
或findFoo()
.
我认为 Java 强制执行强类型,以防止在预期原语时将对象传递给参数的情况。
Integer 的类型适合,所以它的类型被覆盖了。在这种情况下,这只是一个隐式转换(拆箱),这完全没问题。
推荐阅读
- javascript - 更改 URL 而不使用 window.history 重新呈现?
- api - AthenaHealth 沙盒 - practiceID 问题
- r - 如果不做应该做的事
- deep-learning - 我正在尝试使用 DeepSpeed(Microsoft 的训练优化库)训练图形注意神经网络,但无法理解错误?
- mapbox - 如何使用 map.addLayer 绘制水的轮廓?
- apache-spark - Spark 在 SPARK_LOCAL_DIR 上创建的余额文件
- optimization - 解决 Drake 中 Snopt 的错误,如何解决?
- javascript - Paypal 按钮错误:“预期要传递的订单 ID”
- python - 如何计算链A(CZ)原子的受体特定原子与链B上的原子列表之间的距离
- python - 在 /catalog/borrowed/ 配置不当