Findbug 不可变日期修复不起作用

Findbug immutable date fixes do not work

提问人:Wizzard 提问时间:7/25/2014 最后编辑:barfuinWizzard 更新时间:7/28/2014 访问量:566

问:

我有 maven findbug 插件版本 2.5.4,在我的代码中它显示错误:

.getDateRlpx() may expose internal representation by returning Price.dateRlpx 
.setDateRlpx(Date) may expose internal representation by storing an externally mutable object into Price.dateRlpx 

但是,在我的代码中,我使用:

public Date getDateRlpx() {
    return DateUtil.immutableDate(dateRlpx);
}

public void setDateRlpx(final Date dateRlpx) {
    this.dateRlpx = DateUtil.immutableDate(dateRlpx);
}

还有我的不可变日期:

public static Date immutableDate(final Date sourceDate) {
    if (sourceDate == null) {
        return null;
    }
    return new Date(sourceDate.getTime());
}

为什么 findbug 显示此错误?我创建了一个新的 Date 对象。我什至尝试了简单的退货,但它也没有用。我找不到任何解决方案。new Date(dateRlpx.getTimes())

java 不可变性 封装 getter-setter findbugs

评论

1赞 Guus 7/25/2014
这并不能真正回答您的问题(见下文),但作为附加评论:如果可以的话,请考虑升级到 Java 8(与以前的版本不同,它确实提供了不可变的日期和时间核心类)。同时,您可能还想升级您的 FindBugs 插件,因为 3.x 已经在许多个月前发布,并进行了很好的新改进)。
0赞 barfuin 7/26/2014
当我尝试您的示例时,FindBugs 正常工作并且未显示警告。Maven FindBugs 插件 2.5.4 使用 FindBugs 2.0.3,我用 FindBugs 2.0.2 进行了测试。因此,除非它是 2.0.3 中引入的错误,否则它是您的环境存在问题。也许它以某种方式向您显示旧的错误消息或其他东西?
0赞 David Harkness 7/29/2014
如果你还不能迁移到 Java 8,你仍然可以使用它所基于的 JodaTime。

答:

2赞 Wizzard 7/28/2014 #1

是的,托马斯是对的,这是环境问题,特别是从 IDEA IDE 运行 tomcat 服务器,它以某种方式阻止了 findbug 检查固定的源代码,而是检查了目标目录或 .war 中的那个我没有检查它确定。所以现在一切都在工作,findbug 同意 new Date(date.getTime()) 是一个解决方案:)