3

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?

Sean Patrick Floyd
  • 292,901
  • 67
  • 465
  • 588
Stealth
  • 1,559
  • 4
  • 16
  • 34

1 Answers1

5

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.

Sean Patrick Floyd
  • 292,901
  • 67
  • 465
  • 588