PMD Java 8德米特定律
我在Maven项目中使用PMD插件来验证代码冲突和标准。在Java-8中,PMD将以下代码抱怨为Potential violation of Law of Demeter
Arrays.asList(1, 2, 3, 4).stream().filter(n -> n % 2 == 0).collect(Collectors.toList());
还有Optional.ofNullable(value).orElse("another")
,以及几乎所有的lambda表达式
但是,我在pom中设置了以下PMD属性。xml
<targetJdk>1.8</targetJdk>
<rulesets>
<ruleset>/category/java/bestpractices.xml</ruleset>
<ruleset>/category/java/design.xml</ruleset>
<!-- <ruleset>/category/java/codestyle.xml</ruleset> -->
<ruleset>/category/java/errorprone.xml</ruleset>
<ruleset>/category/java/security.xml</ruleset>
<ruleset>/category/java/multithreading.xml</ruleset>
<ruleset>/category/java/performance.xml</ruleset>
</rulesets>
我在配置中遗漏了什么吗?你有什么建议吗
# 1 楼答案
该规则标记未在本地创建/接收为参数的对象的任何用法
这自动意味着所有工厂方法都被标记(
Arrays.asList
、Optional.ofNullable
,等等)您应该从规则集中删除该规则(需要define your own ruleset xml),或者处理误报并抑制它们case by case或customize the rule's suppression(这也需要您定义自己的规则集)