【发布时间】:2019-06-04 12:19:15
【问题描述】:
我正在使用一些旧代码在一个旧项目中工作,而 findbug 给出了以下带有字节 [] 的错误。
FindBugs:可能会通过合并来暴露内部表示 对可变对象的引用 此代码存储对可变对象的引用 外部可变对象转化为内部表示 目的。如果实例被不受信任的代码访问,并且未选中 对可变对象的更改会危及安全性或其他 重要的属性,你需要做一些不同的事情。存储 在许多情况下,对象的副本是更好的方法。
我想知道是否有人可以帮助我了解处理此错误的正确方法?
private byte[] fileContent;
public FileUpload(String fileName, String fileExtension, long fileSize, byte[] fileContent, boolean attachedToPo, boolean programOwner) {
this.fileName = fileName;
this.fileExtension = fileExtension;
this.fileSize = fileSize;
this.fileContent = fileContent;
this.attachedToPo = attachedToPo;
this.programOwner = programOwner;
}
public byte[] getFileContent() {
return fileContent;
}
public void setFileContent(byte[] fileContent) {
this.fileContent = fileContent;
}
编辑 我理解为什么存在这个错误,并且我知道如何处理日期等问题。我只是对如何处理字节 [] 感到有点困惑。
【问题讨论】:
-
检查 getFileContent() 的所有用法,看看结果字节数组是如何使用的。如果未修改,则无需修复。
-
您的对象字节是一个可变元素,这意味着如果您通过在代码的其他部分进行修改来返回该对象,那么您的类中也将被修改。换句话说,它作为引用工作,以避免这个问题返回你的对象的副本而不是你的对象
-
为了修复警告,您需要将 setter 更新为:
this.fileContent = (fileContent == null) ? null : fileContent.clone();
标签: java