Java 三元运算符混淆 Sonar 违规问题

3

Sonar报告以下代码存在困惑的三元操作符问题:

package com.example.dto;

import java.util.Date;

public class ShiftTemplateUserDTO {
  private Date breakStartTime;
  private Date breakEndTime;
  
  public Date getBreakStartTime() {
    return breakStartTime != null ? new Date(breakStartTime.getTime()) : null;
  }

  public void setBreakStartTime(Date breakStartTime) {
    this.breakStartTime = breakStartTime != null ? new Date(breakStartTime.getTime()) : null;
  }

  public Date getBreakEndTime() {
    return breakEndTime != null ? new Date(breakEndTime.getTime()) : null;
  }

  public void setBreakEndTime(Date breakEndTime) {
    this.breakEndTime = breakEndTime != null ? new Date(breakEndTime.getTime()) : null;
  }
}

我尝试更新代码添加if/else条件,但是Sonar仍然在抱怨同样的规则,我做错了什么?

  public Date getBreakStartTime() {
    if (breakStartTime != null) {
      return new Date(breakStartTime.getTime());
    } else {
      return null;
    }
  }

  public void setBreakStartTime(Date breakStartTime) {
    if (breakStartTime != null) {
      this.breakStartTime = new Date(breakStartTime.getTime());
    } else {
      this.breakStartTime = null;
    }
  }

除了解决方案之外,您可能还想在setter中删除此检查并仅存储该值,因为您无论如何都会在getter中提取时间。 - raspy
谢谢您的建议,我已经在setter中删除了检查。 - mohit
3个回答

3

不要在三元运算符中使用否定条件。 尝试将此替换为:

return breakStartTime != null ? new Date(breakStartTime.getTime()) : null;

使用这个:

return breakStartTime == null ? null : new Date(breakStartTime.getTime());

同样适用于您的if-else逻辑。将其替换为:
if (breakStartTime != null) {
  return new Date(breakStartTime.getTime());
} else {
  return null;
}

使用这个:

if (breakStartTime == null) {
  return null;
} else {
  return new Date(breakStartTime.getTime());
}

即使如此,Sonar 仍然显示相同的空指针错误。 - ASR

2
Sonar不喜欢“不相等”的比较。它希望你写成foo == null ? null : ...

0

你也可以考虑这样做:

public Date getBreakStartTime() {
    return breakStartTime != null ? new Date(breakStartTime.getTime()) : null;
}

你只需要这样做:

public Date getBreakStartTime() {
    return breakStartTime;
}

在您当前的代码中,如果Date对象不为空,您将使用原始的Date值构建一个新的Date对象,该新对象具有相同的时间值。这实际上会导致得到相同的对象。您可能会关心不变性。那对您而言真的是个问题吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接