当前位置: 首页 > 知识库问答 >
问题:

Java在传递Integer作为参数[duplicate]时隐式调用intValue

权韬
2023-03-14

所以我遇到了一个由以下示例引起的错误:我有静态方法

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
}

问题是当updateFooid参数中使用null调用时,intValue()在调用findFoo(id)时被隐式调用(我认为)并导致NPE。

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

共有1个答案

丌官淇
2023-03-14

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

您可以在调用findFoo()之前进行空检查,或者只是使用updateFoo()的原语intfindFoo()中的包装类。

我认为Java强制执行强类型化,防止在需要原语时将对象传递给参数。

整数的类型合适,所以它的类型被覆盖了。在这种情况下,它只是一个隐含的铸造(拆箱),这完全没问题。

 类似资料:
  • 现在,我有一个类,它能够添加相同数据类型的向量。对于不同的类型,我必须调用显式转换: 是否可以将向量隐式转换为函数“运算符+()”?下面是我的向量代码:

  • 我在我的Page中编写了以下方法.class用于重用隐式等待。 在我的测试中。我使用的类是页面工厂元素,例如: 现在我正试图从测试中调用:。类,但我得到下面的错误。 “java.lang.ClassCastException:class.com.sun.proxy.$Proxy12不能转换为class.org.openqa.selenium.By(com.sun.proxy.$Proxy12和or

  • 最近我在使用c语言时遇到了一些问题,基本上是这样的: 在一个函数(比如intmain)中,我声明了一个变量Y=5,我有一个lambda函数,它接收一个值并将Y相加; 我的问题是:我需要将这个lambda函数传递给一个已经存在的函数,这样它就可以在另一个函数内部调用。 我尝试了几件事,但没有一个像我预期的那样工作(有些甚至不起作用): 另一个问题是我不能改变我的receives函数签名,因为代码的剩

  • 问题内容: 我正在尝试制作一个方法,该方法的参数为,等等,然后返回。 我将为该方法提供的所有可能的类均从该方法扩展并具有方法。 我的代码: 致电者: 但是,这根本不起作用。 请问我该怎么做? 问题答案: 我想你想做 希望像这样的东西行得通(我的反思能力真的不是那么好)。

  • 问题内容: 我已经熟悉Android框架和Java,并希望创建一个通用的“ NetworkHelper”类,该类可以处理大多数联网代码,使我能够从中调用网页。 我遵循了来自developer.android.com的这篇文章来创建我的网络类:http : //developer.android.com/training/basics/network- ops/connecting.html 码:

  • 问题内容: 在Java中,如何将一个函数作为另一个函数的参数传递? 问题答案: Java 8及以上 如果你的类或接口只有一个抽象方法(有时称为SAM type),则使用Java 8+ lambda表达式,例如: 然后可以在使用MyInterface的任何地方替换lambda表达式: 例如,你可以非常快速地创建一个新线程: 并使用方法引用语法使其更加清晰: 如果没有 lambda表达式,则最后两个示