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

Java中的花括号是什么意思?

如何解决《Java中的花括号是什么意思?》经验,为你挑选了3个好方法。

我有一些Java代码以两种方式使用花括号

// Curly braces attached to an 'if' statement:
if(node.getId() != null)
{
    node.getId().apply(this);
}

// Curly braces by themselves:
{
    List copy = new ArrayList(node.getArgs());
    for(PExp e : copy)
    {
        e.apply(this);
    }
}
outAMethodExp(node);

在第一个if声明之后,那些独立的花括号是什么意思?



1> matt b..:

额外括号的唯一目的是提供范围限制.该List copy会只有那些括号内的存在,并让他们之外没有范围.

如果这是生成的代码,我假设代码生成器执行此操作以便它可以插入一些代码(例如此代码)而不必担心它插入了多少次List copy而不必担心如果此代码段可能重命名变量不止一次插入同一个方法.


在这种情况下,另一个"好处"是`copy`可以在`outAMethodExp()`返回之前进行垃圾收集.如果这是长时间运行或内存密集型呼叫,则可能会有所帮助.我把"好处"放在引号中,因为重构成单独的方法通常比利用这种语法更清晰,更清晰.

2> Dov Wasserma..:

我认为matt b写的是什么,我将补充说,我见过的匿名大括号的另一个用途是在匿名类中声明一个隐式构造函数.例如:

  List names = new ArrayList() {
    // I want to initialize this ArrayList instace in-line,
    // but I can't define a constructor for an anonymous class:
      {
        add("Adam");
        add("Eve");
      }

  };

一些单元测试框架已经将这种语法提升到另一个层次,这确实允许一些看起来完全无法编译的光滑的东西.由于他们看起来不熟悉,我自己并不是一个很大的粉丝,但至少要认识到如果遇到这种用途会发生什么事情是值得的.


"添加"是一种功能.在构造函数执行某些初步初始化之前,会调用大括号内的内容.您可以查看http://www.c2.com/cgi/wiki?DoubleBraceInitialization了解更多信息.

3> Eli..:

我同意范围限制答案,但会增加一件事.

有时你会在喜欢折叠部分代码的人的代码中看到类似这样的结构,并且编辑器会自动折叠括号.他们使用它来折叠逻辑部分中的代码,这些部分不属于通常折叠的函数,类,循环等.

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