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

发布于 2024-10-22 07:55:09 字数 511 浏览 6 评论 0原文

是否可以在运行时以编程方式猜测哪些字段是 由我不拥有的对象的 equals() 方法使用?尤其是当 equals() 不使用 getters 来访问字段:

    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(字节码分析、代理...)?

Is it possible to guess programmatically at runtime which fields are
used by equals() method of an object I don't own ? Especially when
getters are not used by equals() to access fields :

    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;
        }
    }

In this example, is there a way to know equals() uses firstField and not lastField (byte-code analysis, proxy,...) at the moment it is invoked ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蝶…霜飞 2024-10-29 07:55:09

反编译字节码会给你这个答案,但更简单、更合乎逻辑的方法是要求代码所有者以某种方式注释他们的 equals 方法,例如 @ChecksForEqualityOn(. ..)

您需要在运行时执行此操作是否有特殊原因?

Decompiling the bytecode would give you that answer, but an easier and more logical way to do it would be to ask the code owner to annotate their equals method in some way, e.g. @ChecksForEqualityOn(...).

Is there a particular reason you need to do this at runtime?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文