如何检查类是否覆盖了equals和hashCode
有没有办法找出一个类是否覆盖了equals()
和hashCode()
?
你可以使用reflection
public static void main(String[] args) throws Exception { Method method = Bar.class.getMethod("hashCode" /*, new Class>[] {...} */); // pass parameter types as needed System.out.println(method); System.out.println(overridesMethod(method, Bar.class)); } public static boolean overridesMethod(Method method, Class> clazz) { return clazz == method.getDeclaringClass(); } class Bar { /* * @Override public int hashCode() { return 0; } */ }
如果hashCode()
被注释掉,则打印为false
如果不注释,则打印为true
。
Method#getDeclaringClass()
将返回实现它的类的Class
对象。
请注意 , Class#getMethod(..)
仅适用于public
方法。 但在这种情况下, equals()
和hashCode()
必须是public
。 取决于该算法需要针对其他方法进行更改。
要检查您的类中是否声明了方法,您可以使用以下代码。
System.out.println(C.getMethod("yourMethod").getDeclaringClass().getSimpleName());
在这里你可以找到声明类的名称。
因此,请检查子类中的代码以检查是否为equals或hasCode方法。 如果声明的类名与所需的类相同,则匹配
- com.google.gdata.client.GoogleService.setUserToken(android.accounts.AccountManager.getAuthToken(???))
- 删除json对象字符串中的“\”
- 如何使用reflection实例化具有generics类的java.util.ArrayList
- android textureview全屏预览,正确的宽高比
- 等到完成onChildAdded in firebase querys,Android
- 意图开始时的RuntimeException
- Java中的感叹号是什么意思?
- 注释属性Min.value的值必须是常量表达式
- Android,在tomcat服务器上传文件