我在我的项目中运行了 FindBugs,我收到了以下警告:
new foo.pkg.Key(Client, Product, Date, String)
may expose internal representation by storing an externally mutable object intoKey.expireDate
MALICIOUS_CODE EI_EXPOSE_REP2 60 Medium
Key
是一个具有 Date expireDate
的实体,具有各自的 getter 和 setter,并在构造函数中使用它们。
实际上,我只是返回一个(Date) dataNascimento.clone()
,并在setter中使用相同的策略。
问题(按倒序排列):
- 这是更好的方法吗?
- 之前的代码有什么问题?
- 为什么这样做是错误的?
- 是因为 Date 是可变类型吗?
最佳答案
我建议在构造函数中执行您的 (Date) dataNascimento.clone()
调用(直接或通过您的 setter)。
是的,FindBugs 会警告您,因为数据是可变的。您可能在 setter 和 getter 中进行了克隆调用,但您仍然会收到警告,因为您仍然可以更改构造函数中的日期。
关于java - 如何解决 EI_EXPOSE_REP2 及其错误原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10551242/