我在SONAR中注意到我的java代码中有一个名为IllegalType的违规。我找了这个,在Checkstyle中解释了这个:
检查特定类是否从未用作变量声明,返回值或参数中的类型。包括一个模式检查,默认情况下不允许抽象类。
理由:帮助减少具体课程的耦合。另外,抽象类应该被认为是接口的便利基类实现,因此不是类型本身。
但我不明白为什么这是我的代码中的问题。如果有人能够更好地解释我,也许有一个例子可能会很棒!谢谢。
答案 0 :(得分:1)
Aaron Digulla在评论中说的是一个很好的做法。但是我也发现这个IllegalType问题与我自己的抽象类(而不是接口)在我看来并不是很清楚。我理解使用intefaces insteaf类的好处,而且我也理解抽象类是部分类(更多的是类而不是接口)但是我没有看到这个规则的好处,因为我可以找到我的情况可以返回一个具体的类(没有抽象),它是我实际返回的超类。
答案 1 :(得分:0)
并非Sonar发现的所有违规行为都适用于所有人。检查IllegalType
(docs)会尝试确保您不会使用大多数开发人员认为“破坏”的类,例如Vector
(请改用ArrayList
)。
不应将其他类用作返回类型。始终返回List
而不是ArrayList
,Set
而不是HashSet
,Map
而不是HashMap
- 这样,您的代码的消费者就不会知道有关实施的任何不必要的细节。如果您发现需要在方法中将HashMap
替换为TreeMap
(反之亦然),那么如果您不必更改所有位置,那么这将更加简单调用。
通常情况下,检查不是问题(您的代码有效),但修复这些问题将使您的代码在将来更容易维护。