首页 > 解决方案 > 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。nullidintValue()findFoo(id)

我认为 Java 强制执行强类型,以防止在预期原语时将对象传递给参数的情况。进行隐式调用时,这里有一般规则吗?这是否可以被编译器/IDE拾取并可能强制执行或警告?

标签: javamethodsintegerprimitive-typesimplicit-methods

解决方案


如果您使用包装类作为其原始对应部分,则总是会发生这种情况。int不能为空,因此您必须调用intValue()包装类。

您可以在调用之前进行空值检查,也可以findFoo()只使用原语intforupdateFoo()findFoo().

我认为 Java 强制执行强类型,以防止在预期原语时将对象传递给参数的情况。

Integer 的类型适合,所以它的类型被覆盖了。在这种情况下,这只是一个隐式转换(拆箱),这完全没问题。


推荐阅读