【问题标题】:SONAR Violation IllegalType, why it is important to fix it?SONAR Violation IllegalType,为什么修复它很重要?
【发布时间】:2013-12-10 08:01:59
【问题描述】:

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

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

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

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

【问题讨论】:

  • 显示一些代码... 说明:有助于减少具体类的耦合。

标签: java sonarqube rules


【解决方案1】:

Aaron Digulla 在他的 cmets 中所说的话肯定是一个很好的做法。但是,我还发现这个 IllegalType 问题与我自己的抽象类(而不是接口)有关,在我看来,这似乎不是很清楚。我了解使用接口而不是类的好处,并且我也了解抽象类是部分类(类比接口多得多),但我没有看到这条规则的好处,因为我可以找到我的案例可以返回一个具体类(没有抽象),它是我实际返回的超类。

【讨论】:

  • 我的问题更多是为了让 Manuelarte 在他的评论中谈论什么。
【解决方案2】:

并非 Sonar 发现的所有违规行为都适用于所有人。检查IllegalType (docs) 试图确保您不使用大多数开发人员认为“损坏”的类,例如Vector(改用ArrayList)。

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

通常,检查本身不是问题(您的代码有效),但修复这些问题将使您的代码在未来更易于维护。

【讨论】:

    猜你喜欢
    • 2011-12-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    相关资源
    最近更新 更多