gpt4 book ai didi

java - 在 Java 中将变量范围扩展到大括号之外

转载 作者:行者123 更新时间:2023-12-02 07:17:14 24 4
gpt4 key购买 nike

假设我有以下代码块:

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

其目的是获取某个对象 foo 的版本和内容的线程安全一致 View 。

有没有办法写得更简洁,看起来更像这样?

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

问题在于,在此版本中,变量是在(同步)花括号的范围内定义的,因此无法在 block 之外访问。所以,问题是:是否有某种方法可以将这些大括号标记为不定义新的作用域 block 或将变量标记为属于父作用域而不必在那里声明它们?

(注意:我不想简单地将 //Do some with version and content 拉入同步块(synchronized block)中。)

最佳答案

简单地说...不。作用域变量仅在其声明的作用域内可用。这就是他们的重点。 Java Language Specification 的第 14.4.2 节对此进行了描述。 :

The scope of a local variable declaration in a block (§14.2) is the rest of the block in which the declaration appears, starting with its own initializer (§14.4) and including any further declarators to the right in the local variable declaration statement.

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

关于java - 在 Java 中将变量范围扩展到大括号之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14793901/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com