java - 如何阻止编译器将未初始化的对象读取为错误

标签 java object null

我有 eclipse,当我试图查看一个未初始化的对象是否等于 null 时,它不会让我这样做,它出现了一个“x 可能没有被初始化”的错误,我知道它应该可以工作。

我的意思的例子:

      Object obj;
      System.out.println(obj==null ? "no value":"has a value");

它不会编译,它会说“obj 可能尚未初始化”我如何更改 eclipse 中的编译器设置来解决这个问题?

最佳答案

How can I change my compiler settings in eclipse to fix this?

你不能。 Java 语言规范要求任何符合标准的 Java 编译器将此视为编译错误。

没有 Eclipse 编译器设置导致它打破这个规则。

即使(假设地)存在这样的设置,我认为当 JVM 尝试加载字节码文件时,字节码文件将无法通过验证。 (如果您能以某种方式欺骗 JVM 使用未初始化的局部变量的值,那将破坏运行时类型安全性,导致 JVM 崩溃……甚至更糟。)


如果 obj 是一个实例变量而不是局部变量,它会被默认初始化null,你不会得到一个编译错误。但是局部变量没有默认初始化。

关于java - 如何阻止编译器将未初始化的对象读取为错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13889364/

相关文章:

java - 在 cordova-android 的 CordovaLib 编译中找不到符号 ClientCertRequest

java - 我们可以从 xml 文件创建一个类吗?

ios - 将 [NSNull null] 值存储在 NSUserDefaults 中,来自 JSON 序列化,会导致不需要的异常

c# - 确定列表框项目的来源

javascript - 删除对对象方法的公共(public)访问

mysql - 在 MySQL 查询中获取 NULL 值

ruby - Ruby 方法应该返回 nil 还是空对象

java - 这段代码中是否存在资源(准备好的语句)泄漏?

java - 使用 JNDI 在 Tomcat 中共享 servlet session 对象和数据

java - Objectify4 所需的 jar