gpt4 book ai didi

java - hashCode() 和 equals() 与 Class

转载 作者:行者123 更新时间:2023-12-01 23:05:47 28 4
gpt4 key购买 nike

我在使用 equals()hashcode() 时遇到了意外问题。

Eclipse 拒绝正确生成它们,因为 Class 不会覆盖它们。哦哦。

所以我必须通过 .getName() 结果来比较它们,但它很难看。

private Class<T> clientClass;

@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + clientClass.getName().hashCode();
return result;
}


@Override
public boolean equals(Object obj)
{
if (this == obj) return true;
if (obj == null) return false;
if (!(obj instanceof MessageChannel)) return false;

MessageChannel<?, ?> other = (MessageChannel<?, ?>) obj;

if (!clientClass.getName().equals(other.clientClass.getName())) return false;

return true;
}

请注意,T 是一个参数。

如何正确执行此操作?

最佳答案

您不需要做一些特殊的事情来处理类的equalshashcode。当前行为(继承自Object)在语义上是正确的。 (如果 Eclipse 警告您,请忽略它。这些警告是不正确的。)

Isn't it possible that I get two different instances of Class representing the same class? Object just uses == on them afaik. Perhaps with two classloaders or whatever, I'm not that familiar with this reflection magic.

是的,这是可能的。

但在这种情况下,从 Java 类型系统的角度来看,它们实际上是不同的类。 (有关详细信息,请参阅 JLS 4.3.4。)因此,您应该将它们视为不平等的。

关于java - hashCode() 和 equals() 与 Class<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22772874/

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