避免"变量可能尚未初始化"的最佳实践

Cla*_*gon 5 java

我有以下代码:

    boolean needToAddToMap = false;
    Required required;
    synchronized(requiredMap)
    {
        if (requiredMap.containsKey(userId))
        {
            required = parserSetAndActionsMap.get(userId);
        }
        else
        {
            logger.warning("userId not found in map, adding now.");
            needToAddToMap = true;
        }
    }
    if (needToAddToMap)
    {
        required = addNewRequired(userId);
    }
Run Code Online (Sandbox Code Playgroud)

后来我使用required但得到一个错误,即使"required"已经明确初始化.这可以被认为是编译器中的一个错误,但我知道捕获所有情况在计算上是困难的(甚至是不可能的).

有几种可能的解决方案:

  1. 抑制警告(不确定是否可行)
  2. 初始化为null
  3. 使用锁更长时间,或使用锁两次

这些解决方案都不是理想的,最好的解决方案是什么?还有其他方法吗?

cнŝ*_*ŝdk 3

\n

避免 \xe2\x80\x9c 变量的最佳实践可能尚未初始化\xe2\x80\x9d?

\n
\n\n

为了避免它,你必须初始化它,我不认为将它设置为null会给你带来任何损失,或者会给你带来任何不好的结果,但它肯定会阻止它导致和引发此异常。

\n\n

请记住,局部变量在使用之前应先用值进行初始化。

\n\n

所以只需将其初始化为null

\n\n
Required required= null ;\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以你可以在你的声明中使用它if

\n

  • 事实上,它*必须*在使用之前进行初始化。 (2认同)