Java 将NetBeans提示设置为在通过带有int签名的方法返回整数时发出警告

Java 将NetBeans提示设置为在通过带有int签名的方法返回整数时发出警告,java,netbeans,methods,integer,int,Java,Netbeans,Methods,Integer,Int,我的代码中有一个严重的错误,幸运的是我发现了:),因为我忘了更改方法的返回类型签名(从int改为Integer),我的应用程序在没有任何警告的情况下崩溃了 我有以下方法: public static int getDataSourceIdForName(String name) { Integer i = dsNameToIdMap.get(name); return i; } 它正在破坏我的应用程序。我注意到它只有在发生特殊情况时才会崩溃,名称实际上不在映射中(map dsN

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

我有以下方法:

public static int getDataSourceIdForName(String name) {
    Integer i = dsNameToIdMap.get(name);
    return i;
}
它正在破坏我的应用程序。我注意到它只有在发生特殊情况时才会崩溃,
名称实际上不在映射中(
map dsNameToIdMap=newhashmap()
),因此它返回null。我希望一个正在运行的应用程序抛出一个
NullPointerException
,但事实并非如此,应用程序正在消亡,我兴奋地发现了这个bug:)

由于我希望我的IDE支持在将来避免这些情况,我想问大家如何设置
NetBeans
来警告这些情况,也就是说,当我在返回签名为原始类型的函数中返回一个对象时,
,因为我自己无法理解

更新: 我发现了真正的问题。代码实际上抛出了
NullPointerException
,正如Jon正确地指出的那样:)只有我的客户的生存机制才隐藏了它,正如您在下面的示例中所看到的:

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);
    }
}
公共类whynollPointerException{
私有静态int测试(){
整数i=null;
返回i;
}
公共静态void main(字符串[]args)引发InterruptedException{
线程t=新线程(新的可运行线程(){
@凌驾
公开募捐{
对于(int i=0;i<100;i++){
System.out.println(“i=“+i”);
如果(i==10){
试一试{
test();
}最后{
run();
}
}
}
}
});
t、 setDaemon(true);
t、 start();
睡眠(1111);
}
}
由于中的程序最终试图通过重新启动其主操作循环来保持活动状态,因此它“隐藏”了
NullPointerException

为了避免将来出现这种情况,我现在总是在这个自重启代码中,在finally块之前添加一个catch for 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;
    }
}
现在,您可能希望也可能不希望NetBeans在自动取消装箱时发出警告。。。但至少值得先检查一下发生了什么:)

我发现了一个突出显示自动装箱/取消装箱和varargs的应用程序,但它非常旧,可能在您使用的版本上不受支持

我希望它可以配置为一个编译器选项(在Eclipse中),但我没有足够的NetBeans经验来说明更多内容。

它确实抛出了
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;
    }
}
现在,您可能希望也可能不希望NetBeans在自动取消装箱时发出警告。。。但至少值得先检查一下发生了什么:)

我发现了一个突出显示自动装箱/取消装箱和varargs的应用程序,但它非常旧,可能在您使用的版本上不受支持


我希望它可以配置为一个编译器选项(在Eclipse中),但我没有足够的NetBeans经验来说明更多内容。

我很确定代码只会抛出一个NullPointerException。。。你建议它做什么呢?可能是你需要写一个新的提示并导入。@JonSkeet我自己认为可能会出现NullPointerException,但事实并非如此。我将尝试构建一个简单的测试用例来向您证明:)@Nambari您能将我链接到告诉我如何做的源代码吗?@Boro:我添加了一个简单的测试用例来证明它确实抛出了NullPointerException。我怀疑问题不在您认为的地方,或者异常正在某个地方被捕获和转换。。。你建议它做什么呢?可能是你需要写一个新的提示并导入。@JonSkeet我自己认为可能会出现NullPointerException,但事实并非如此。我将尝试构建一个简单的测试用例来向您证明:)@Nambari您能将我链接到告诉我如何做的源代码吗?@Boro:我添加了一个简单的测试用例来证明它确实抛出了NullPointerException。我怀疑问题不在您认为的地方,或者异常正在某个地方被捕获和转换。您是对的(+1),我也做了我的示例,以查看它是否实际发生:)我必须查看
logback.xml
,但我确实收到了任何其他类型的异常,只是这一个?尽管让NetBeans警告我这些情况仍然很好。@Boro:我不知道你在做什么,所以不能评论你为什么没有看到异常。我对NetBeans了解不多,但这个插件可能会有所帮助:谢谢大家。让我研究一下,当我有了
NetBeans
解决方案时,我将在这里分享它。如果我在try-catch中显式地捕获它,那么就可以捕获它。所以它被抛出,但出于某种原因,它从未在控制台上打印出来,为什么?!不用担心,乔恩。我不知道什么是
隐藏
调试器也没有显示此异常,并且我在该代码周围没有try-catch块。不管怎样,我将尝试分离它,并在明天复制它。再次感谢,谢谢大家。根据我的更新,我认为问题已经解决了。虽然开发插件比我想象的要困难得多