在程序中向 Java 语言添加不可变编程规则

Adding immutable programming rules to the Java language within a program

我正在 Java 中编写程序。我发现当范式技术一致时,阅读和调试代码是最容易的,这让我可以很快地假设问题出在哪里和什么。

正如您可能猜到的那样,这样做使我的编程速度更快,因此我想找到一种方法来执行这些规则。

例如,假设我有一个更改对象状态的方法,returns 是一个值。如果在 class 之外调用该方法,我不想看到它在参数括号内解析,如下所示:

 somefunction(param1, param2, object.change_and_return());

相反,我希望这样做:

 int relevant_variable_name = object.change_and_return();

 somefunction(param1, param2, relevant_variable_name);

另一个例子,我想创建一个包含某些打印方法的基础 class,并且我希望用户定义的所有 classes 都派生自该基础 class, java 已经做到了。

在我的对象中,有没有一种方法可以强迫我自己(和其他任何人)遵守这些规则? IE。如果您尝试 运行 违反规则的代码,它将终止并 return 自定义错误报告。此外,如果您编写的代码违反了规则,IDE(我使用的是 eclipse)会将其识别为错误,下划线并调用相应的 javadoc?

对于检查和下划线违规部分:

你可以使用 PMD,它是一个静态代码分析器。

它有一个默认的规则集,你可以编写custom rules匹配你需要的。

但是您的控件在 "PMD language" 中表达起来似乎相当复杂。

PMD 在 Eclipse Marketplace 可用。

对于如果不符合部分会崩溃

没有简单的方法可以做到。

Hard/complex 方式可以是:

  • 在 PMD 中编写规则,运行 在编译时分析,解析报告(仍在编译时),return 如果违反规则则报错。
  • 写一个 Java Agent 做规则检查,如果违反规则,让它使 VM 崩溃(不确定它是否真的可行,代理是用于检测的)。
  • 在代码中的任何位置使用反射来加载 classes,并根据您的规则分析加载的 class 并在违反规则时使 VM 崩溃(严重不要这样做:代码会很丑陋,而且很容易绕过规则。