我有以下代码:
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);
}
稍后我使用required但得到错误,即使“required”已明确初始化。这可以被认为是编译器中的一个错误,但我知道捕获所有情况在计算上是困难的(甚至是不可能的)。
有几种可能的解决方案:
这些解决方案都不是理想的,最好的是什么?任何其他解决方案?
答案 0 :(得分:3)
避免“变量可能尚未初始化”的最佳做法?
为了避免它,你必须初始化它,我不认为将它设置为null
会给你带来任何损失,或者会给你带来任何坏事,但它肯定会阻止它引起并提高它异常。
请记住,在使用之前,应该使用值初始化局部变量。
所以只需将其初始化为null
:
Required required= null ;
因此,您可以在if
声明中使用它。
答案 1 :(得分:1)
你必须初始化它,所以编译器会很高兴,否则你可以选择最好的/首选的方式来初始化它像这样:
Required required = null;
synchronized(requiredMap)
{
if (requiredMap.containsKey(userId))
{
required = parserSetAndActionsMap.get(userId);
}
else
{
logger.warning("userId not found in map, adding now.");
}
}
if (null == required)
{
required = addNewRequired(userId);
}
或者如果你真的讨厌初始化为null,那就用这样的东西来避免它:
Required required = addNewRequired(userId);;
synchronized(requiredMap)
{
if (requiredMap.containsKey(userId))
{
required = parserSetAndActionsMap.get(userId);
// remove userId from required
}
}
我们最终得到了这个代码的众多版本,只需选择您认为最适合您的程序要求的代码