Java 声纳违法类型,为什么修复它很重要?

Java 声纳违法类型,为什么修复它很重要?,java,sonarqube,rules,Java,Sonarqube,Rules,我在SONAR中注意到,我的java代码中有一个称为非法类型的违规行为。我找了这个,在Checkstyle中解释一下: 检查特定类是否从未用作变量声明、返回值或参数中的类型。包括默认情况下不允许抽象类的模式检查 理由:有助于减少具体类上的耦合。此外,抽象类应该被认为是接口实现的方便基类,因此,抽象类本身不是类型 但我真的不明白为什么我的代码中会出现这个问题。如果有人能更好地解释我,也许能举个例子,那就太好了!。非常感谢。声纳发现的所有违规行为并非都适用于所有人。检查IllegalType()试图

我在SONAR中注意到,我的java代码中有一个称为非法类型的违规行为。我找了这个,在Checkstyle中解释一下:

检查特定类是否从未用作变量声明、返回值或参数中的类型。包括默认情况下不允许抽象类的模式检查

理由:有助于减少具体类上的耦合。此外,抽象类应该被认为是接口实现的方便基类,因此,抽象类本身不是类型


但我真的不明白为什么我的代码中会出现这个问题。如果有人能更好地解释我,也许能举个例子,那就太好了!。非常感谢。

声纳发现的所有违规行为并非都适用于所有人。检查
IllegalType
()试图确保您不使用大多数开发人员认为在某种程度上“损坏”的类,如
Vector
(使用
ArrayList

其他类不应用作返回类型。始终返回
List
而不是
ArrayList
Set
而不是
HashSet
Map
而不是
HashMap
——这样,代码的使用者就不会知道有关实现的任何不必要的细节。如果您发现需要在方法中用
TreeMap
(反之亦然)替换
HashMap
,如果您不必更改调用此方法的所有位置,那么这将非常简单


一般来说,检查本身不是问题(您的代码可以正常工作),但修复这些问题将使您的代码在将来更易于维护。

Aaron Digulla在评论中所说的肯定是一个很好的实践。然而,我也在自己的抽象类(而不是接口)中发现了这个非法类型的问题,在我看来,这个问题并不十分清楚。我理解使用intefaces而不是类的好处,我也理解抽象类是部分类(与其说是类,不如说是接口),但我看不到这条规则的好处,因为我可以找到可以返回具体类(无抽象)的情况这是我实际返回的超类。

显示一些代码。。。说明:有助于减少具体类的耦合。我的问题更符合Manuelarte在评论中所说的。