我在项目中运行了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中使用相同的策略。这是更好的方法吗?
答案 0 :(得分:7)
我建议您在构造函数中执行(Date) dataNascimento.clone()
调用(直接或通过setter)。
是的,FindBugs警告你,因为数据是可变的。您可以在setter和getter中进行克隆调用,但是仍然会收到警告,因为您仍然可以更改构造函数中的日期。