簡體   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