0

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

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

4 回答 4

8

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

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()多次调用是一个问题取决于您的方案 - 在某些情况下这将是一个坏主意,您应该重组您的代码以避免它。我们无法确定,但值得考虑。

于 2013-06-17T05:59:44.227 回答
3

你可以这样做 :

final String textValue = (text != null && text.getText() != null) ? text.getText() : "" ;
于 2013-06-17T06:00:00.463 回答
0

我不确定您所说的“最佳”是什么意思(对程序员最友好?最有效的执行?)

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

final String textValue = (text != null && text.getText() != null) ? text.getText() : "";
于 2013-06-17T06:01:51.940 回答
0

我假设这条线在方法的某个地方。所以这个将更具可读性:

String value = "";
if (text != null && text.getText() != null) {
  value = text.getText();
}
final String textValue = value;
于 2013-06-17T06:02:30.967 回答