Jen*_*son 17 java if-statement initialization
我有点等待这个问题的'不'答案.
我很感兴趣,如果你在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.");
}
Run Code Online (Sandbox Code Playgroud)
我现在处理"失败"状态 - 即使结果是相同的,也是独立的.我可以这样把他们聚在一起:
if(foo!=null && foo.getBar()!=null){
Bar bar = foo.getBar();
System.out.println("Success: " + bar);
} else {
System.out.println("Failure.");
}
Run Code Online (Sandbox Code Playgroud)
已经有更简洁的代码了.如果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.");
}
Run Code Online (Sandbox Code Playgroud)
如果我愿意,我将不得不将其分解为两个不同的if
Bar bar = foo.getBar();
if (bar!=null) ...
Run Code Online (Sandbox Code Playgroud)
Mic*_*rdt 32
这是你能得到的最接近的:
Bar bar;
if(foo!=null && (bar = foo.getBar())!=null){
System.out.println("Success: " + bar);
} else {
System.out.println("Failiure.");
}
Run Code Online (Sandbox Code Playgroud)
Sta*_*ale 12
我在迭代BufferedReader的行时使用了这种技术:
BufferedReader br = // create reader
String line
while ((line = br.readLine()) != null) {
// process the line
}
Run Code Online (Sandbox Code Playgroud)
所以是的,你可以做一个任务,结果将是左侧变量,然后你可以检查.但是,在测试中声明变量是不合法的,因为它们只能作用于该表达式.
如果你想限制条形栏的范围,我会在迈克尔发布的代码周围添加{和}.
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被允许.
| 归档时间: |
|
| 查看次数: |
7732 次 |
| 最近记录: |