Pau*_*cks 76 java syntax scope curly-braces
我有一些Java代码以两种方式使用花括号
// Curly braces attached to an 'if' statement:
if(node.getId() != null)
{
node.getId().apply(this);
}
// Curly braces by themselves:
{
List<PExp> copy = new ArrayList<PExp>(node.getArgs());
for(PExp e : copy)
{
e.apply(this);
}
}
outAMethodExp(node);
Run Code Online (Sandbox Code Playgroud)
在第一个if声明之后,那些独立的花括号是什么意思?
mat*_*t b 118
额外括号的唯一目的是提供范围限制.该List<PExp> copy会只有那些括号内的存在,并让他们之外没有范围.
如果这是生成的代码,我假设代码生成器执行此操作以便它可以插入一些代码(例如此代码)而不必担心它插入了多少次List<PExp> copy而不必担心如果此代码段可能重命名变量不止一次插入同一个方法.
Dov*_*man 26
我认为matt b写的是什么,我将补充说,我见过的匿名大括号的另一个用途是在匿名类中声明一个隐式构造函数.例如:
List<String> names = new ArrayList<String>() {
// I want to initialize this ArrayList instace in-line,
// but I can't define a constructor for an anonymous class:
{
add("Adam");
add("Eve");
}
};
Run Code Online (Sandbox Code Playgroud)
一些单元测试框架已经将这种语法提升到另一个层次,这确实允许一些看起来完全无法编译的光滑的东西.由于他们看起来不熟悉,我自己并不是一个很大的粉丝,但至少要认识到如果遇到这种用途会发生什么事情是值得的.
我同意范围限制答案,但会增加一件事.
有时你会在喜欢折叠部分代码的人的代码中看到类似这样的结构,并且编辑器会自动折叠括号.他们使用它来折叠逻辑部分中的代码,这些部分不属于通常折叠的函数,类,循环等.
我实际上猜测有人忘记了 else 声明。
很少有充分的理由去创建额外的块作用域。在这种情况下,以及大多数情况下,有人可能忘记输入他们的控制语句,而不是他们做了一些聪明的事情。
| 归档时间: |
|
| 查看次数: |
39547 次 |
| 最近记录: |