我有一个类的复制构造函数,但Android Studio代码检查抛出了一个我不明白的警告:
“java.util.Arrays.copyOf(other.value,other.value.length)”复制构造函数中的字段值赋值可疑
public class CpuVariable extends BaseIdentifier {
private int memoryType;
private byte[] value;
public CpuVariable(@NonNull CpuVariable other) {
super(other);
this.memoryType = other.memoryType;
if (other.value != null) {
this.value = java.util.Arrays.copyOf(other.value, other.value.length);
}
}
}
将代码更改为
this.value = other.value
将删除警告,但这不是一个选项,因为我需要为字段创建深度副本或克隆。
我是否编码错误,或者忽略或抑制警告是否安全?
2条答案
按热度按时间xxhby3vn1#
这显然是一个误报。你的构造函数实际上没有什么问题。
我认为产生此警告的代码基于this code。请注意,这不是真正的Android Studio代码,但有线索表明Android Studio可能通过某种途径“借用”了它。
如果您查看
constructorAssignsAllFields
方法(第63行),代码的目的似乎是查找复制构造函数复制错误字段的代码错误;e、 例如:但该方法不能正确处理复制构造函数正在转换其中一个字段的情况。
查看代码,您需要以一种方式编写
this.value =
,使检查器不会意识到它正在分配给字段。例如,如果您使用了类似这样的setter方法:5cnsuln72#
如果复制构造函数有任何其他问题,比如复制构造函数没有复制所有字段,那么这种情况似乎也会发生。在这种情况下,我在IntelliJ中也看到了同样的错误。