我使用的是IntelliJ IDEA 2018.1.3终极版,需要将其与大整数(大到不适合long,例如20180531234240565494)进行比较,表示为字符串:
public int compareNumeric(String compareTo) {
return new BigInteger(version).compareTo(new BigInteger(compareTo));
}这是提出的这里解决方案,我一直认为这是从String创建BigInteger的正确方法。
然而,IntelliJ通过Sonar插件给了以下警告:
构造函数不应用于实例化"String“、"BigInteger”、"BigDecimal“和基元包装类squid:s 2129。 字符串、BigInteger、BigDecimal和用于包装原语的对象的构造函数不应使用。这样做不太清楚,而且使用更多的内存,在字符串的情况下只使用所需的值,而对其他的一切都使用valueOf。 此外,Java 9中不推荐这些构造函数,这表明它们最终将从语言中完全删除。不兼容代码示例 字符串空=新字符串();//不兼容;本质上产生"",所以只需使用它。字符串非空=新字符串(“Hello”);//非兼容双myDouble =新的双(1.1);//不兼容;使用valueOf整数=新整数=新整数(1);//不兼容布尔bool =新布尔(真);//非兼容BigInteger bigInteger =新BigInteger("1");//不兼容bigDecimal BigDecimal =新BigDecimal(1.1);//不兼容BigDecimal BigDecimal=新BigDecimal(1.1);//不兼容的布尔bool=新布尔(真) 兼容解决方案 字符串空= "";字符串非空= "Hello“;双myDouble = Double.valueOf(1.1);整数整数= Integer.valueOf(1);布尔=Boolean.valueOf(真);BigInteger bigInteger = BigInteger.valueOf(1);BigDecimal bigDecimal = BigDecimal.valueOf(1.1);
首先,我不认为构造函数在Java9中受到反对,Sonar在这里是错的吗?
我是做错了比较,引发了假阳性,还是应该用其他方式进行比较?
我唯一能想到的方法是直接比较字符串,但这也会迫使我首先检查字符串是否是数字的。
发布于 2018-06-05 09:03:57
您遇到了这个问题,SONARJAVA-2740已经修复了最新的SonarJava版本,应该在几天内就可以公开发布。
https://stackoverflow.com/questions/50695355
复制相似问题