2017-01-16 14 views
1

如果在未標記爲變量時重新分配變量,是否可以通過編譯器開關或常用工具(我不知道)來中斷編譯可變關鍵字(這在Java中尚不存在)?強制Java編譯器假定所有變量都是最終的

例子:

Contract a; // compile error 
Contract b = getContract(id); // ok 
b.doSomething(); // ok 
b = getContract(otherId); // compile error 
mutable int i = 1; 
i++; // ok 

我知道有語言都是這樣的,但被迫代碼Java技術的公司,使用這樣的工具是唯一的選擇。

問候, JG。

+1

谷歌的errorprone有一個檢查:http://errorprone.info/bugpattern/Var。 –

回答

1

不,你不能強制Java編譯器這樣做。而且您不能將非Java關鍵字(如mutable)放入Java源代碼中。沒有兼容的Java編譯器將允許其中任何一個。

您可以使用自定義註釋來「聲明」可變局部變量,並使用靜態分析器來檢測沒有註釋的本地人的分配。

甚至可能有現有的分析工具,註釋等,這將爲你做這個,雖然我不知道一個工具,完全符合法案。

(該FinalLocalVariable支票的CheckStyle不會做的正是你想要的。它會告訴你在哪裏添加final來聲明,但是這不是你問什麼......我想你想的變量被處理作爲final即使他們沒有被明確宣佈爲。)


但在我看來,這將是一個壞主意,做到這一點。

您的僱主做出了一個決定(對與錯)Java是唯一可以使用的語言。其中一個原因將確保您開發的代碼可以由Java程序員維護和增強。通過使用不尋常的符號,以便您可以編寫零賦值代碼,您正在破壞公司政策。

充其量,你不會讓自己受同事的歡迎。

2

查看CheckStyle靜態代碼分析工具。您也可以將其集成到您的IDE中。 FinalLocalVariable檢查看起來像你的情況:

檢查是從未有他們的價值觀改變了局部變量 聲明爲final。該檢查可以配置爲檢查 未更改的參數是否已聲明爲最終。

另外還有PMD源代碼分析器。但我從來沒有用過它,所以不能提出任何建議。

相關問題