是否可以在运行时以编程方式猜测哪些字段 我不拥有的对象的equals()方法使用?特别是当 equals()不使用getter来访问字段:
class OverrideEquals {
String firstField;
Integer secondField = 0;
@Override public boolean equals(Object other) {
if ( other instanceof OverrideEquals ) {
return lastField.equals(((OverrideEquals) other).lastField);
}
return false;
}
}
在这个例子中,有没有办法知道equals()在调用它时使用firstField而不是lastField(字节码分析,代理......)?
答案 0 :(得分:0)
对字节码进行反编译会给出答案,但更简单,更合理的方法是让代码所有者以某种方式注释他们的equals
方法,例如: @ChecksForEqualityOn(...)
。
您是否需要在运行时执行此操作?