如何解决EI_EXPOSE_REP2及其错误的原因

时间:2012-05-11 12:21:09

标签: java findbugs

我在项目中运行了FindBugs,并收到以下警告:

new foo.pkg.Key(Client, Product, Date, String) may expose internal representation by storing an externally mutable object into Key.expireDate   MALICIOUS_CODE  EI_EXPOSE_REP2  60  Medium

Key是一个实体,其Date expireDate及其各自的getter和setter,并在构造函数中使用它们。

那么,怎么了?为什么这到底是错的?是因为Date是一个可变类型吗?

实际上,我只返回一个(Date) dataNascimento.clone(),并在setter中使用相同的策略。这是更好的方法吗?

1 个答案:

答案 0 :(得分:7)

我建议您在构造函数中执行(Date) dataNascimento.clone()调用(直接或通过setter)。

是的,FindBugs警告你,因为数据是可变的。您可以在setter和getter中进行克隆调用,但是仍然会收到警告,因为您仍然可以更改构造函数中的日期。