繁体   English   中英

在Java中扩展变量范围超出花括号

[英]Expanding variable scope beyond curly braces in Java

假设我有以下代码块:

int    version;
String content;
synchronized (foo) {
    version = foo.getVersion();
    content = foo.getContent();
}
// Do something with version and content

它的目的是获取一些对象foo的版本和内容的线程安全一致视图。

有没有办法更简洁地写它看起来更像这样?

synchronized (foo) {
    int    version = foo.getVersion();
    String content = foo.getContent();
}
// Do something with version and content

问题是在这个版本中,变量是在(同步)花括号的范围内定义的,因此不能在块外部访问。 所以,问题是:有没有办法将这些花括号标记为不定义新的范围块或将变量标记为属于父范围而不必在那里声明它们?

(注:我不想简单地拉// Do something with version and content 。到synchronized块)

简单地说......不。 范围变量仅在声明的范围内可用。 这就是他们的全部观点。 这在Java语言规范的第14.4.2节中描述

块(第14.2节)中局部变量声明的范围是声明出现的块的其余部分,从其自己的初始化器(第14.4节)开始,并在本地变量声明语句中包含右侧的任何其他声明器。

您的变量需要在它们要使用的范围内声明(或更高,但绝对不低)。

抱歉不行。 当你越来越多地使用这种语言时,这只是看起来更好/更正常的东西。

如果您希望无法从其他范围访问这些变量,则可以在另一个范围中定义变量和同步块。 像这样的东西:

{
    int    version;
    String content;
    synchronized (foo) {
        version = foo.getVersion();
        content = foo.getContent();
    }
    // Do something with version and content
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM