Java 单行中的双空检查
以下代码是在一行中检查Java 单行中的双空检查,java,null,final,Java,Null,Final,以下代码是在一行中检查null两次以初始化final变量的最佳方法吗 final String textValue = text != null ? text.getText() != null ? text.getText() : "" : ""; 我可能会使用带有&&条件的单个条件: final String textValue = text != null && text.getText() != null ? text.getText()
null
两次以初始化final
变量的最佳方法吗
final String textValue = text != null ? text.getText() != null ? text.getText() : "" : "";
我可能会使用带有
&&
条件的单个条件:
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()
是一个问题,取决于您的场景-在某些情况下,这是一个坏主意,您应该重新构造代码以避免它。我们无法确定,但值得考虑。您可以这样做:
final String textValue = (text != null && text.getText() != null) ? text.getText() : "" ;
我不知道你所说的“最佳”(对程序员最友好?执行效率最高?) 但程序员友好的替代方案可能是:
final String textValue = (text != null && text.getText() != null) ? text.getText() : "";
我假设这条线在某个方法中的某个地方。因此,这本书更具可读性:
String value = "";
if (text != null && text.getText() != null) {
value = text.getText();
}
final String textValue = value;
text!=null&&text.getText()!=空
-记住&
和|
短路。虽然,我会尝试确保text
永远不能为null,并且getText
永远不能返回null,但这可能只是一厢情愿的想法?如果(text!=null&&text.length()=0)
您可以通过执行text!=null&&text.getText()!=无效的text.getText():“”代码>如果您觉得这对于您的程序员同伴来说非常容易理解,那么请继续;-)@奥宾:为什么不呢?对于这种情况,它大概是好的——如果它是一个“长期手术”或有副作用,那么就没有了。@Aubin:也许吧。也许不是。如果不知道所涉及的类,我们真的不知道。出于性能原因,我不知道(我也不想知道)getText()方法有多复杂。在“方法”版本中,三元应替换为两行。@Aubin让JIT来处理这个问题。@Aubin:我编辑了答案,给出了这个选项,但简单性常常战胜了潜在的(但不现实的)性能问题。例如,我很高兴在一个循环中调用ArrayList.size()
。@LuiggiMendoza然后你可以向上投票他的答案,向下投票我的答案。我已经不再从自称的主持人那里拿任何东西了。我不需要投你的反对票,因为有些人回答了OP的问题。@TheNewIdiot:没有人建议投反对票-没有必要这么咄咄逼人。像往常一样,友好的提问地点和敌对的回答地点也是如此-/@TheNewIdiot:Stack Overflow拥有数百万用户。仅仅因为你和一些人有过不好的经历就对每个人都有攻击性,这并不是一个好的策略。