gpt4 book ai didi

java - 查找未实现 hashCode 的类

转载 作者:行者123 更新时间:2023-11-30 06:23:50 24 4
gpt4 key购买 nike

我有一个包含相当多类的项目,当我在 Intellij 中使用 Debug 运行时,它提供了与 Run 不同的答案。两种情况的答案都是正确的,但有所不同。

我怀疑有一个或多个类没有实现hashCode,这是造成差异的原因。我们在多个地方使用基于哈希的集合。

如何轻松找到未实现 hashCode 的类,而无需手动检查它们?

最佳答案

您可以尝试使用自定义类加载器运行它,打印不覆盖 hashCode 的类。运行 -Djava.system.class.loader=my.package.HashFindingLoader

package my.package;
import java.lang.reflect.Method;

public class HashFindingLoader extends ClassLoader {

public HashFindingLoader(ClassLoader parent) {
super(parent);
}

@Override
public Class<?> loadClass(String name) throws ClassNotFoundException {
Class<?> c = super.loadClass(name);

//filters out librry classes, adjust as necessary
if(!c.getPackage().getName().matches("^(java|sun).*")){
Method hashCode;
try {
hashCode = c.getMethod("hashCode");
} catch (NoSuchMethodException|SecurityException ex) {
throw new RuntimeException(ex);
}
if (hashCode.getDeclaringClass().equals(Object.class)){
System.out.printf("%s does not override hashCode%n", c);
}
}
return c;
}

}

关于java - 查找未实现 hashCode 的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47628195/

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