Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
强制Java编译器假定所有变量都是最终变量_Java_Functional Programming - Fatal编程技术网

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

强制Java编译器假定所有变量都是最终变量,java,functional-programming,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中还没有)时被重新分配,是否有可能通过编译器开关或常用工具(我不知道)中断编译

例如:

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

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

检查从未更改其值的局部变量是否正确 宣布为最终决定。该检查可以配置为也检查 未更改的参数被声明为最终参数


还有源代码分析器。但是我从未使用过它,所以我不能提出任何建议。

不,你不能强迫Java编译器这么做。您不能将非Java关键字(如
mutable
)放入Java源代码中。任何兼容的Java编译器都不允许这两种情况

您可以使用自定义注释来“声明”可变的局部变量,并使用静态分析器在没有注释的情况下检测对局部变量的赋值

甚至可能有现有的分析工具、注释等可以为您实现这一点,尽管我不知道有哪种工具能够完全符合要求

(检查CheckStyle的
FinalLocalVariable
并不能完全满足您的要求。它会告诉您在哪里向声明中添加
final
,但这不是您想要的……我认为。您希望变量被视为
final
,即使它们没有明确声明为final。)


但在我看来,这样做是个坏主意

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


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

谷歌的易出错软件对此进行了检查:。