2016-05-30 57 views
-6

嗨是這樣的可能在Java?布爾值是否存在後賦值運算符?

boolean flag = true; 
if(flag) return flag = false; // return true and assign false to flag afterwards 

澄清。以上的作品,但首先是假的。想要實現的是儘快將旗返回true,然後將其重置爲false

結構看起來是這樣的:

boolean flag = false; 
// some operations which can set the flag true 
if(flag){ flag = false ; return true}; 
// some operations which can set the flag true 
if(flag){ flag = false ; return true}; 
// some operations which can set the flag true 
if(flag){ flag = false ; return true}; 

我被return flag = false;

+3

你爲什麼不嘗試告訴我們? – TDG

+0

爲什麼你不使用'if(flag){flag = false;返回true; }'? –

+0

@KevinCruijssen是的,這將工作。只是好奇,如果有什麼事情的情況下。 –

回答

5

沒有考慮這樣做在一氣呵成,沒有什麼內置的,做你的描述。你會做它用一個臨時變量:

boolean flag = true; 
boolean returnValue = flag; 
flag = false; 
return returnValue; 

或者根據您的進一步編輯的問題(「的結構看起來是這樣的」),您可以使用!

boolean flag = false; 
// some operations which can set the flag true 
if(flag) return !(flag = false); 
// some operations which can set the flag true 
if(flag) return !(flag = false); 
// some operations which can set the flag true 
if(flag) return !(flag = false); 

真的,真的不會那麼做。這是不必要的鈍。

+4

@MuratK .:疲勞。有太多的問題,只有很少的解釋,甚至沒有想到,當發佈一個模糊的問題(而原始問題非常模糊)時,人們對它很厭倦,他們的反應比他們應該做的更苛刻,或者會在真實生活中。在發佈之前花點時間回顧一下你的問題是非常值得的,問問你自己是否假設你沒有收錄的信息,試圖確保你簡潔但不清楚等等,這樣問題的最初版本看起來更像你的最終版本。 –

2

看看java.util.concurrent.AtomicBoolean。我沒有試過這個,但它可能會給你所問的行爲:

AtomicBoolean flag = new AtomicBoolean(true); 
System.out.println("First, I'm " + flag.get()); 
Boolean was = flag.getAndSet(false); 
System.out.println("I was " + was + " but now I'm " + 
    Flag.get()); 
2

不,沒有辦法做到這一點。

爲什麼不呢?

那麼您需要向Java語言設計師提出真正的答案,但我想他們會拋棄這樣的提案。 Java是設計的是一種易於學習,閱讀和理解的語言。添加旨在以簡明的方式做「聰明」事情的操作符會使語言更難學,更難以閱讀......對於平均程序員。而且,如果運營商只在很少的用例中真正有用,那麼這使得可讀性與實用性的爭論更難以取勝。

此外,由於與其他(現有)語言功能的交互,向Java添加新功能通常在技術上比您想象的要難得多。

實際上,有先例支持這一點。 Project Coin中的Java 7/8修訂提案之一是向Java添加elvis operator。該提案被認爲是...並最終dismissed