eclipse:使用未初始化的字段时引发编译器警告

eclipse: raise compiler warning when using fields that are not initialized

提问人:Newton fan 01 提问时间:4/24/2018 更新时间:4/24/2018 访问量:501

问:

在 GWT 应用程序的上下文中(gwt:创建 Window 实例会导致应用程序挂起),我将值设置为忘记初始化的文本小部件,导致类似于浏览器控制台中的空指针异常。

困扰我的是Eclipse没有显示任何警告/错误。所以我检查了以下示例:

Object obj;
//obj = new Object();
obj.toString();

Eclipse 说道:

局部变量 obj 可能尚未初始化

但是当 obj 是类的一个字段时,我没有得到任何警告:

public class MyClass
{
   Object obj;

   public MyClass()
   {
        //obj = new Object();
        obj.toString();// I expect to get some warning here
   }
}

我转到 Java > Compiler >> Errors / Warnings > Window Preferences,使用文本“null”进行过滤,唯一相关的结果在名为“Null analysis”的部分下;在这里,Null 指针访问已设置为引发警告;潜在的空指针访问设置为“忽略”,我修改它以引发警告,但对于上述示例,我仍然没有收到警告。有没有其他方法可以告诉编译器提醒我这样的情况?

Java Eclipse NullPointerException 警告

评论

0赞 Zefick 4/24/2018
默认情况下,以 null 初始化的字段(基类型为 0)。
0赞 Newton fan 01 4/24/2018
我知道这一点。问题是编译器在尝试操作保持 null 的字段时什么也没说

答:

0赞 yassadi 4/24/2018 #1

我用谷歌搜索了一下,我发现了 Eclipse 的报告错误系统,我看到了作者的这句话:

默认情况下,不会分配未赋值的变量,用户应在代码的所有可能分支中赋值该变量,否则会发生编译时错误。

还有:

只有字段才能获得默认值。需要在所有可能的路径中初始化局部变量。

所以他们的思路是,他们需要你随时初始化变量,如果你没有这样做,这应该是编译器的问题,就词法、语法和语义分析器而言,这没有问题。这就是不发出警告的原因。

评论

0赞 Newton fan 01 4/24/2018
关于你的回答,我想说三点:1.我对默认不赋值的局部变量完全不感兴趣;在这种情况下,编译器会引发错误,我对这种行为完全没问题。我的问题解决了另一个方面 - 具有 null 值的字段和编译器没有抱怨这一点。2. 好的,字段获取默认值 - 在本例中为 null;这甚至没有改变问题:我仍然有一个 null 字段(无论它是如何变成 null 的),当作它时编译器没有抱怨;
0赞 Newton fan 01 4/24/2018
3. 即使 Eclipse 网站提供了一些最佳实践建议,这种行为通常也可以在 Eclipse 设置中被覆盖。这就是我一直在寻找的
0赞 yassadi 4/25/2018
为什么编译器要关注你的 null 字段,只要你不使用它?
0赞 Newton fan 01 4/25/2018
我实际上正在使用该字段 - 当我调用 toString() 或任何其他方法时;我希望编译器在我使用它的那一刻确定该字段是否为 null
0赞 yassadi 4/26/2018
但是,当你定义它时,你并没有使用它。只要涉及编译器,您已经在其他地方定义了它,或者它将是它的默认值,即 .null