![](/img/trans.png)
[英]Which will be given preferences while calling method with parameter as (int, int), Method with signature (int, int) or (Integer, Integer)
[英]Set NetBeans hints to warn when returning Integer by method with int signature
我的代码中有一个严重的错误,很幸运,我发现了:),因为我忘了更改方法的返回类型签名(从int到Integer),并且我的应用程序崩溃了,没有任何警告。
我有以下方法:
public static int getDataSourceIdForName(String name) {
Integer i = dsNameToIdMap.get(name);
return i;
}
它崩溃了我的应用程序。 我观察到它仅在发生特殊情况时崩溃,并且name
实际上不在地图中( Map<String, Integer> dsNameToIdMap = new HashMap<>()
),因此它返回null。 我希望正在运行的应用程序抛出NullPointerException
但事实并非如此,该应用程序快要死了,我兴奋地发现了这个错误:)
由于我希望在将来避免这些情况时得到我的IDE的支持,所以我想问你们如何设置NetBeans
来警告这些情况,即当我在函数中返回对象时,该函数的返回签名是原始类型,例如我自己不知道。
更新:我已经找到了真正的问题。 正如乔恩(Jon)正确地指出的那样,代码实际上抛出NullPointerException
:)只有我的客户的“生存机制”将其隐藏,如下面的示例所示:
public class WhyNoNullPointerException {
private static int test() {
Integer i = null;
return i;
}
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("i = " + i);
if (i == 10) {
try{
test();
}finally{
run();
}
}
}
}
});
t.setDaemon(true);
t.start();
Thread.sleep(1111);
}
}
由于该程序最终试图通过重新启动其主要操作循环来保持生命,因此,它“隐藏”了NullPointerException
。
为了避免将来再次出现这种情况,我现在将始终在此自动重启的代码中,在finally块之前添加Exception的捕获,作为一种好的做法,这样就不会“丢失”异常(我在第一篇中提到了该块)我的代码中有一个字节读取在那里可以抛出IOException
)。
关于提示的开发,我发现了一个非常不错的教程,今天我将继续学习该教程,并希望它将有一个有效的提示(下面的链接)。 感谢您的链接人员(@JonSkeet和@Nambari),他们在查找有关提示开发的更多信息时非常有用。
它确实抛出NullPointerException
:
import java.util.*;
public class Test {
private static final Map<String, Integer> map
= new HashMap<String, Integer>();
public static void main(String[] args) {
getInt("Foo");
}
public static int getInt(String name) {
Integer i = map.get(name);
return i;
}
}
结果:
c:\Users\Jon\Test>java Test
Exception in thread "main" java.lang.NullPointerException
at Test.getInt(Test.java:13)
at Test.main(Test.java:8)
现在你可能会或可能不会也想在NetBeans中警告对自动拆箱......但它是值得至少检查是怎么回事第一:)
我发现了一个突出显示自动装箱/拆箱和varargs的插件 ,但是它已经很旧了,可能不支持您所使用的版本。
我希望这是配置的编译器选项(这是Eclipse),但我没有与NetBeans足够的经验多说。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.