当前位置: 首页 > 知识库问答 >
问题:

SonarQUBE和compareTo日期

竺承望
2023-03-14

我有个声纳窃听器:

改为使用原始值。规则:对于可以是“min_value”的数字,不应使用“math.abs”或否定

public int compareDates(MyDto a, MyDto b) {
        SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy hh:mm");
        try {
            Date dateA = sdf.parse(a.getStartDate() + " " + a.getStartHour());
            Date dateB = sdf.parse(b.getStartDate() + " " + b.getStartHour());
            return - dateA.compareTo(dateB); //Sonar BUG
        } catch (ParseException e) {
            logger.error("Unable to parse date: " + e.getMessage());
            return 0;
        }   
    }

现在我真的不知道该做些什么来修正。从比较中返回的整数可以是负数也可以是不是负数,我怎么解决才能让SQ开心呢?

共有1个答案

扶绍辉
2023-03-14

IMO这几乎是假阳性。

datea.compareto(dateB)的结果可能是integer.min_value,在这种情况下,-datea.compareto(dateB)的计算结果也是integer.min_value,因此不会产生所需的结果。

实际上,该调用极有可能返回-101(即,它并不是指定只返回这些值,而是我所见过的date.compareto()的所有实现都返回这些值)。

只要返回dateb.compareto(dateA)就可以了!只是交换你所用的论点,就像否定结果一样,没有声纳提到的风险。

 类似资料:
  • 通过删除所有前导和尾随空格返回一个新字符串。 但是,此方法不会丢弃两个字符串之间的空格。 语法 (Syntax) compareTo(String other) 返回值 (Return Type) 返回表示两个字符串之间关系的整数。 0 - 字符串相等时。 1 - 当第一个字符串大于第二个字符串时 -1 - 当第一个字符串小于第二个字符串时 例子 (Example) void main() {

  • 它返回一个整数,表示两个数字之间的关系。 语法 (Syntax) Number.compareTo(x) 参数 (Parameter) x - 代表一个数字。 返回值 (Return Value) 返回值 - 0 - 如果值相等。 1 - 如果当前数字对象大于指定的数值。 -1 - 如果当前数字对象小于指定的数字值。 例子 (Example) void main() { var a =

  • 比较两个日期的订购。 语法 (Syntax) public int compareTo(Date anotherDate) 参数 (Parameters) anotherDate - 要比较的日期。 Return Value - 如果参数Date等于此Date,则值为0 ; 如果此Date在Date参数之前,则小于0的值; 如果此Date在Date参数之后,则值大于0 。 例子 (Example

  • compareTo方法是使用一个数字与另一个数字进行比较。 如果要比较数字的值,这很有用。 语法 (Syntax) public int compareTo( NumberSubClass referenceName ) 参数 (Parameters) referenceName - 可以是Byte,Double,Integer,Float,Long或Short。 返回值 (Return Va

  • 描述 (Description) 该方法将调用方法的Number对象与参数进行比较。 可以比较Byte,Long,Integer等。 但是,无法比较两种不同的类型,参数和调用方法的Number对象应该是相同的类型。 语法 (Syntax) public int compareTo( NumberSubClass referenceName ) 参数 (Parameters) 这是参数的细节 -

  • 我试图实现Comparable和compareTo(),但似乎无法实现。我一直在尝试不同的方法,但我真的不明白。我知道我应该实现可比较的接口,并且我需要在使用它之前创建方法(对我来说很奇怪,从python到面向对象编程)。 我希望它能比较两个人的年龄,所以我试着编写如下所示的代码,但似乎我不能使用compareTo()。我收到错误消息:“此方法必须返回int类型”,但在我看来,我只返回1、-1和0