JUnit 的方法计数将compareTo 方法计数两次。为什么?

发布于 2024-11-14 10:25:51 字数 387 浏览 3 评论 0原文

我正在开发一个 Java Springframework 项目并使用 JUnit4 来测试它。

我的类实现了 Comparable 并重写了 CompareTo 方法。

在我的测试中,当我执行

@Test
Class<myClass> m = myClass.class;
Method[] methods = m.getDeclaredMethods();
assertEquals(5, methods.length); 

此测试时,即使 myClass 中恰好有 5 个方法也会失败。当我查看 Eclipse 调试器时,我发现compareTo 方法被调用了两次。

我找不到这种行为的解释。为什么会出现这种情况?

I am working on a Java Springframework project and using JUnit4 to test it.

My class implements Comparable and overrides the compareTo method.

In my test, when I do

@Test
Class<myClass> m = myClass.class;
Method[] methods = m.getDeclaredMethods();
assertEquals(5, methods.length); 

This test fails even though there are exactly 5 methods in myClass. When I looked in the Eclipse debugger, I see that the compareTo method gets called twice.

I can't find an explanation for this behavior. Why does this happen?

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

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

发布评论

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

评论(1

我还不会笑 2024-11-21 10:25:52

编译器为 compareTo() 生成一个桥接方法

该机制解释得很好 Angelika Langer 的泛型常见问题解答:什么是桥接方法?

什么是桥接方法?

编译器认为的合成方法
在类型过程中生成
擦除。有时需要时
类型扩展或实现
参数化类或接口。这
编译器插入桥接方法
参数化超类型的子类型
确保子类型工作正常
预计。

The compiler generates a bridge method for compareTo()

The mechanism is explained very well in Angelika Langer's Generics FAQ: What is a bridge method?:

What is a bridge method?

A synthetic method that the compiler
generates in the course of type
erasure. It is sometimes needed when
a type extends or implements a
parameterized class or interface. The
compiler insert bridge methods in
subtypes of parameterized supertypes
to ensure that subtyping works as
expected.

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