gpt4 book ai didi

java - 如何解决问题: int cannot be dereferenced

转载 作者:行者123 更新时间:2023-11-29 06:46:56 25 4
gpt4 key购买 nike

这里我有一些值,其中两个是整数,我不能对它们调用方法,因为它们不是引用。我该如何解决这个问题?

String srcAddr, dstAddr, protocol;
int srcPort, dstPort;

public int hashCode() {

final int prime = 31;
int result = 1;
result = prime * result + ((dstAddr == null) ? 0 : dstAddr.hashCode());
result = prime * result + ((dstPort == null) ? 0 : dstPort.hashCode());
result = prime * result + ((srcAddr == null) ? 0 : srcAddr.hashCode());
result = prime * result + ((srcPort == null) ? 0 : srcPort.hashCode());
return result;

}

另外,我也有一个equal的方法,下面是错误的部分,和上面一样,我无法将int与null进行比较。

@Override
public boolean equals(Object obj) {

if (srcPort == null) {
if (other.srcPort != null)
return false;
} else if (!srcPort.equals(other.srcPort))
return false;

if (srcPort == null) {
if (other.srcPort != null)
return false;
} else if (!srcPort.equals(other.srcPort))
return false;
}

我该如何解决这个错误?

最佳答案

编写 hashcodeequals 可能很乏味和/或容易出错,而 Eclipse 等 IDE 实际上可以为您自动执行此任务。许多第三方库也可以促进此功能。

要使用标准库中的内容,我建议执行以下操作:

import java.util.Arrays;

// conveniently packs varargs to array
private static Object[] pack(Object... objs) {
return objs;
}

private Object[] fieldsAsArray() {
return pack(srcAddr, dstAddr, protocol, srcPort, dstPort);
}

@Override public int hashCode() {
return Arrays.hashCode(this.fieldsAsArray());
}

@Override public boolean equals(Object o) {
// TODO: instanceof check, cast and assign o to other

return Arrays.equals(this.fieldsAsArray(), other.fieldsAsArray());
}

这使用 varargs , autoboxing , 和 java.util.Arrays数组的相等性和哈希码的实用方法实现。这将具有足够的(虽然可能不是最佳的)性能,但代码简洁易读,并且在必要时始终可以在以后进行优化。


第三方库选项

来自 Apache Commons Lang , 你可以使用 EqualsBuilderHashCodeBuilder .

文档中有典型用法的示例:

@Override public boolean equals(Object obj) {
if (obj == null) { return false; }
if (obj == this) { return true; }
if (obj.getClass() != this.getClass()) {
return false;
}
MyClass other = (MyClass) obj;
return new EqualsBuilder()
.appendSuper(super.equals(obj))
.append(field1, other.field1)
.append(field2, other.field2)
.append(field3, other.field3)
.isEquals();
}

@Override public int hashCode() {
return new HashCodeBuilder(17, 37)
.append(field1)
.append(field2)
.append(field3)
.toHashCode();
}

生成的代码可读性强、易于维护且不易出错。

相关问题

关于java - 如何解决问题: int cannot be dereferenced,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3482711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com