单行双重检查

时间:2013-06-17 05:58:02

标签: java null final

以下代码是在一行中检查null两次以初始化final变量的最佳方法吗?

final String textValue = text != null ? text.getText() != null ? text.getText() : "" : "";

4 个答案:

答案 0 :(得分:7)

好吧,我可能会使用&&条件的单个条件:

final String textValue = text != null && text.getText() != null ? text.getText()
                                                                : "";

如果您发现需要在多个地方执行此操作,您可能希望将其包装在方法中:

// We don't know what the type of text is here... adjust appropriately.
public static String getTextOrDefault(TextBox text, String defaultValue)
{
    return text != null && text.getText() != null ? text.getText()
                                                  : defaultValue;
}

或进行了调整以避免多次调用getText()

// We don't know what the type of text is here... adjust appropriately.
public static String getTextOrDefault(TextBox text, String defaultValue)
{
    if (text == null)
    {
        return defaultValue;
    }
    String textValue = text.getText();
    return textValue != null ? text.getText() : defaultValue;
}

然后您可以简化变量声明:

final String textValue = SomeHelper.getTextOrDefault(text, "");

请注意,是否多次调用text.getText()是一个问题取决于您的方案 - 在某些情况下,这将是一个坏主意,您应该重新构建代码以避免它。我们无法确定,但值得考虑。

答案 1 :(得分:3)

你可以这样做:

final String textValue = (text != null && text.getText() != null) ? text.getText() : "" ;

答案 2 :(得分:0)

我不确定你的意思是什么“最好”(大多数程序员友好?执行效率最高?)

但程序员友好的替代方案可能是:

final String textValue = (text != null && text.getText() != null) ? text.getText() : "";

答案 3 :(得分:0)

我认为这条线在方法的某个地方。所以这个会更具可读性:

String value = "";
if (text != null && text.getText() != null) {
  value = text.getText();
}
final String textValue = value;