首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >声纳定义常数的方法

声纳定义常数的方法
EN

Stack Overflow用户
提问于 2015-05-29 07:16:22
回答 2查看 13K关注 0票数 13

我使用Sonarqube5.1和实验“声纳方式”的Java质量概要文件。任务很简单:我想为缺少的媒体类型定义一个全局字符串常量:

代码语言:javascript
复制
public interface Utf8MediaType {
    String APPLICATION_JSON = "application/json;charset=UTF-8";
}

但是,Sonarqube告诉我,这是乌贼规则中的错误做法:S 1214-常量不应该在接口中定义。长文讨论了实现这个接口的问题,我并不打算这样做,但我放弃并创建了一个类:

代码语言:javascript
复制
public class Utf8MediaType {
    public static final String APPLICATION_JSON = "application/json;charset=UTF-8";
}

然而,这被认为是规则squid中的一个主要设计问题:S 1118-实用程序类不应该有公共构造函数。所以它敦促我添加一个私有构造函数。当然,这个构造函数必须首先不违反规则squid:s 1213中的约定--接口声明或类的成员应该以预定义的顺序出现。在那之后,我想我甚至可能会变得很普通-java:InsufficientBranchCoverage,因为私有构造函数没有包含在测试中。

这些都是默认的规则,我觉得它们结合起来有点傻。我有更多的例子说明默认值对我们不起作用(缺少TestNG支持)。我能做些什么?你有什么建议吗?

  • 投降吧。使它成为一个类,添加一个私有构造函数,在单元测试中使用内省。把代码做了十倍大。一个字符串常量。
  • 创建一个异常列表。但是,为每个项目这样做可能会导致长列表,并邀请人们添加例外,即使是重要的事情。
  • 停用规则。现在我不想篡改默认配置文件,因为这可能意味着在Sonarqube升级方面做了大量工作。
  • 创建一个从默认继承并覆盖事物的配置文件。原来,当您从配置文件继承时,您不能停用规则。您只能添加其他规则并更改规则的配置(以降低其严重性)。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-10 20:19:46

投降吧。使它成为一个类,添加一个私有构造函数,在单元测试中使用内省。把代码做了十倍大。一个字符串常量。

一般来说,这是正确的做法。您确实不想创建一个“常量”接口。需要私有构造函数来确保用户不会无意中扩展或实例化不应该实例化的对象。

How to add test coverage to a private constructor?

创建一个异常列表。但是,为每个项目这样做可能会导致长列表,并邀请人们添加例外,即使是重要的事情。

工作太多了。

停用规则。现在我不想篡改默认配置文件,因为这可能意味着在Sonarqube升级方面做了大量工作。

正如你说的..。馊主意。

创建一个从默认继承并覆盖事物的配置文件。原来,当您从配置文件继承时,您不能停用规则。您只能添加其他规则并更改规则的配置(以降低其严重性)。

如果您将严重性设置为"info“,它将从技术债务计算中删除它。我必须使用squid:S1213来完成这个操作,这是在使用Eclipse指定的默认顺序进行排序时引发的。

票数 4
EN

Stack Overflow用户

发布于 2019-10-04 00:26:32

问这个问题已经有几年了,但是声纳林特还在抱怨

代码语言:javascript
复制
public interface Utf8MediaType {
    String APPLICATION_JSON = "application/json;charset=UTF-8";
}

现在声纳林特提出

代码语言:javascript
复制
public final class Utf8MediaType {
    public static final String APPLICATION_JSON = "application/json;charset=UTF-8";
}

但我仍然不喜欢使用public static final时不需要的“额外”interface。在我们的项目中,我们转换到Kotlin,它可以逐个文件完成,方法是:

代码语言:javascript
复制
object Utf8MediaType {
    const val APPLICATION_JSON = "application/json;charset=UTF-8"
}

甚至比Java接口还短。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30523430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档