强制Java编译器假定所有变量都是最终变量
如果一个变量在没有标记为可变关键字(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 我知道有些语言是这样的,但在一家公司被迫编写
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程序员可以维护和增强您开发的代码。通过使用不寻常的符号,您可以编写零分配代码,这破坏了公司的政策
这样做充其量也不会让你自己受到同事的欢迎。谷歌的易出错软件对此进行了检查:。