强制Java编译器假设所有变量都是最终的

时间:2017-01-16 09:28:45

标签: java functional-programming

是否可能 - 通过编译器开关或常用工具(我不知道) - 如果在未标记为可变关键字时重新分配变量(在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。

2 个答案:

答案 0 :(得分:2)

查看CheckStyle静态代码分析工具。您还可以将其集成到IDE中。 FinalLocalVariable检查看起来像你的情况:

  

检查从未更改过值的局部变量   宣布决赛。可以将检查配置为也检查   未更改的参数被声明为final。

还有PMD源代码分析器。但是我从未使用它,因此无法提出任何建议。

答案 1 :(得分:1)

不,你不能强迫Java编译器这样做。而且您不能将非Java关键字(如mutable)放入Java源代码中。没有兼容的Java编译器将允许其中任何一个。

您可以使用自定义注释来声明&#​​34;可变局部变量,并使用静态分析器检测没有注释的本地分配。

甚至可能会有现有的分析工具,注释等为您完成此操作,但我不知道一个完全适合该法案的工具。

(CheckStyle的FinalLocalVariable检查并不能完全符合您的要求。它会告诉您将final添加到声明的位置,但这并不是您要求的for ...我想。你希望变量被处理final,即使它们没有被明确声明为这样。)

但在我看来,这样做是不错的主意。

您的雇主已做出决定(对或错),Java是您可以使用的唯一语言。其中一个原因将确保Java程序员可以维护和增强您开发的代码。通过使用不常见的符号使您可以编写零分配代码,您正在破坏公司政策。

充其量,通过这样做,你不会让自己受到同事的欢迎。