【问题标题】:Java: "Local variable may not have been initialized" not intelligent enough?Java:“局部变量可能没有被初始化”不够智能?
【发布时间】:2012-09-30 12:57:35
【问题描述】:

考虑以下方法:

void a ()
{
    int x;
    boolean b = false;
    if (Math.random() < 0.5)
    {
        x = 0;
        b = true;
    }
    if (b)
        x++;
}

x++ 上,我收到“局部变量可能尚未初始化”错误。显然 x 永远不会在未初始化的情况下使用。除了初始化 x 之外,还有什么方法可以抑制警告?谢谢。

【问题讨论】:

  • 不,没有。

标签: java variables compiler-errors local initialization


【解决方案1】:

不,Java 无法检查程序的所有可能代码路径以确定变量是否已初始化,因此它采用安全路径并警告您。

所以不,你必须初始化你的变量来摆脱这个。

【讨论】:

  • 这有点误导:问题在 IDE 之外也是一样的,在编译时,这不仅仅是一个警告。
  • 如果这可能导致运行时问题,为什么要禁止显示警告。
  • -1 因为这个答案无益且傲慢。 “不,Java 无法检查程序的所有可能代码路径以确定变量是否已初始化”:OP 没有询问 Java 是否可以这样做。他已经验证了自己的逻辑是有效的,所以他来这里询问他是否可以摆脱错误信息。你没有回答那个问题。
【解决方案2】:

有一个:

void a () {
    if (Math.random() < 0.5) {
        int x = 1;
    }
}

编译器不负责设计和测试算法。你是。

但也许你应该提出一个更实际的用例。你的例子并没有真正表明你的目标是什么。

【讨论】:

  • 好的。我可以知道为什么有 2 人支持上述评论吗?我认为毛里西奥在两秒钟内发表了评论,将我的初始帖子与修复错字的编辑区分开来,但为什么其他两个人后来对他的评论投了赞成票?
【解决方案3】:

你为什么不简单地使用

void a ()
{
    int x;
    boolean b = false;
    if (Math.random() < 0.5)
    {
        x = 0;
        b = true;
        x++;
    }
    if (b) {
        //do something else which does not use x
    }
}

在代码中为什么要在第一个 if 块之外使用 x,所有涉及 x 的逻辑只能在第一个 if 块中实现,我没有看到需要使用的情况其他 if 块使用 x。

编辑:或者您也可以使用:

void a ()
{
    int x;
    boolean b = (Math.random() < 0.5);
    if (b) {
         x=1
        //do something 
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多