所以我遇到了一个由以下示例引起的错误:我有静态方法
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
在id
参数中使用null
调用时,intValue()
在调用findFoo(id)
时被隐式调用(我认为)并导致NPE。
我认为Java强制执行强类型,以防止在需要原语时将对象传递给参数的情况。当进行隐式调用时,这里有一般规则吗?这可以被编译器/IDE采用并可能强制或警告吗?
如果您使用包装类作为其原始对应部分,则总是会发生这种情况。int
不能为空,因此您必须将intValue()
调用到包装类上。
您可以在调用findFoo()
之前进行空检查,或者只是使用updateFoo()
的原语int
或findFoo()
中的包装类。
我认为Java强制执行强类型化,防止在需要原语时将对象传递给参数。
整数的类型合适,所以它的类型被覆盖了。在这种情况下,它只是一个隐含的铸造(拆箱),这完全没问题。