当前位置:  开发笔记 > 编程语言 > 正文

你能在if子句中存储一个变量吗?

如何解决《你能在if子句中存储一个变量吗?》经验,为你挑选了3个好方法。

我有点等待这个问题的'不'答案.

我很感兴趣,如果你在if子句中检查变量时可以同时保存变量.

假设我有这个代码.

if(foo!=null){
  if(foo.getBar()!=null){
    Bar bar = foo.getBar();
    System.out.println("Success: " + bar);
  } else {
    System.out.println("Failure.");
  }
} else {
  System.out.println("Failure.");
}

我现在处理"失败"状态 - 即使结果是相同的,也是独立的.我可以这样把他们聚在一起:

if(foo!=null && foo.getBar()!=null){
  Bar bar = foo.getBar();
  System.out.println("Success: " + bar);
} else {
  System.out.println("Failure.");
} 

已经有更简洁的代码了.如果foo为null,它将停在那里并且不会尝试foo.getBar(在if中)所以我不会得到NPE.我想要提升的最后一件事,主要问题是:我真的给过两次调用foo.getBar()吗?如果getBar()将是一个非常繁重的操作,那么离开第二个相同的调用将是很好的.所以我想知道是否有可能做一些与此类似的事情:

if(foo!=null && (Bar bar = foo.getBar())!=null){
  Bar bar = foo.getBar();
  System.out.println("Success: " + bar);
} else {
  System.out.println("Failure.");
}

如果我愿意,我将不得不将其分解为两个不同的if

Bar bar = foo.getBar();
if (bar!=null) ...

Michael Borg.. 32

这是你能得到的最接近的:

Bar bar;
if(foo!=null && (bar = foo.getBar())!=null){
  System.out.println("Success: " + bar);
} else {
  System.out.println("Failiure.");
}


Staale.. 12

我在迭代BufferedReader的行时使用了这种技术:

BufferedReader br = // create reader
String line
while ((line = br.readLine()) != null) {
    // process the line
}

所以是的,你可以做一个任务,结果将是左侧变量,然后你可以检查.但是,在测试中声明变量是不合法的,因为它们只能作用于该表达式.



1> Michael Borg..:

这是你能得到的最接近的:

Bar bar;
if(foo!=null && (bar = foo.getBar())!=null){
  System.out.println("Success: " + bar);
} else {
  System.out.println("Failiure.");
}



2> Staale..:

我在迭代BufferedReader的行时使用了这种技术:

BufferedReader br = // create reader
String line
while ((line = br.readLine()) != null) {
    // process the line
}

所以是的,你可以做一个任务,结果将是左侧变量,然后你可以检查.但是,在测试中声明变量是不合法的,因为它们只能作用于该表达式.



3> TofuBeer..:

如果你想限制条形栏的范围,我会在迈克尔发布的代码周围添加{和}.

void foo()
{
    // some code ...

    // this block limits the scope of "Bar bar" so that the rest of the method cannot see 
    // it.
    {
        Bar bar;
        if(foo!=null && (bar = foo.getBar())!=null){
            System.out.println("Success: " + bar);
        } else {
            System.out.println("Failiure.");
        }
    }
}

如果有意义,您可能还需要检查空对象模式.我个人试图避免事情为空,如果我可以......真的想想你是否想让null被允许.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有