繁体   English   中英

设置通过带有int签名的方法返回Integer时警告的NetBeans提示

[英]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),他们在查找有关提示开发的更多信息时非常有用。

NetBeans Java提示模块教程。

确实抛出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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM