java - 设置 NetBeans 提示以在使用 int 签名的方法返回 Integer 时发出警告

标签 java netbeans methods integer int

我的代码中有一个严重的错误,幸运的是我发现了:),因为我忘记更改方法的返回类型签名(从 int 到 Integer),并且我的应用程序在没有任何警告的情况下崩溃了。

我有以下方法:

public static int getDataSourceIdForName(String name) {
    Integer i = dsNameToIdMap.get(name);
    return i;
}

它使我的应用程序崩溃了。我观察到只有当特殊情况发生并且 name 时它才会崩溃。实际上不在 map 中( Map<String, Integer> dsNameToIdMap = new HashMap<>() ),因此它返回 null。我希望正在运行的应用程序抛出 NullPointerException但事实并非如此,该应用程序简直快要死了,我满怀兴奋地寻找这个错误:)

由于我希望我的 IDE 能够支持我避免将来出现这些情况,所以我问你们如何设置 NetBeans警告这些情况,即当我在返回签名是原始类型的函数中返回对象时,因为我自己无法弄清楚。

更新: 我已经找到了真正的问题。该代码实际上抛出 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);
    }
}

由于程序最终试图通过重新启动其主操作循环来保持 Activity 状态,因此它“隐藏”了 NullPointerException .

为了避免将来出现这种情况,我现在总是会在这个自重启代码中,在finally block 之前添加一个异常捕获作为一个好的实践,这样异常就不会“丢失”(我在代码中首先有这个 block ,我在那里读取了一个字节,它可能会抛出 IOException )。

关于提示的开发,我发现了一个非常好的教程,我今天将学习该教程,希望能有一个有效的提示(下面的链接)。感谢您的链接(@JonSkeet 和 @Nambari),他们对于找到更多有关提示开发的信息非常有用。

NetBeans Java Hint Module Tutorial.

最佳答案

它确实确实抛出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 在自动拆箱时发出警告...但至少值得先检查一下发生了什么:)

我找到了plugin其中突出显示了自动装箱/拆箱和可变参数,但它非常旧,您正在使用的版本很可能不支持。

希望可以将其配置为编译器选项(在 Eclipse 中),但我没有足够的 NetBeans 经验,无法多说。

关于java - 设置 NetBeans 提示以在使用 int 签名的方法返回 Integer 时发出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12899169/

相关文章:

C++ 运算符重载的 Java 等价物

java - Javadoc 的替代品?

javascript - 在netbeans中使用node.js从mysql数据库添加值以选择表单

java - Netbeans/REST 中的 POST 方法给出错误

java - 需要帮助才能从正在运行的类中运行方法

Java 8 正则表达式 : a capturing group in a pattern doesn't match, 但整个模式确实匹配

java - "double Cannot be Dereferenced"toString() - 这种没有错误的替代形式是否意味着同样的事情?

Javascript 函数无法发出 HTTP 请求

java - 从aspectJ中带注释的方法获取局部变量值

java - 方法覆盖不起作用