在equals()中使用的运行时字段猜测

时间:2011-03-16 16:50:41

标签: java runtime field 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(字节码分析,代理......)?

1 个答案:

答案 0 :(得分:0)

对字节码进行反编译会给出答案,但更简单,更合理的方法是让代码所有者以某种方式注释他们的equals方法,例如: @ChecksForEqualityOn(...)

您是否需要在运行时执行此操作?