[英]Guess at runtime fields used in equals()
是否可以在运行时以编程方式猜测我不拥有的对象的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(字节码分析,代理等)?
反编译字节码将为您提供答案,但是更简单,更合理的方法是让代码所有者以某种方式注释其equals
方法,例如@ChecksForEqualityOn(...)
。
您是否需要在运行时执行此操作的特定原因?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.