This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
Which of the following statements are true about bridge methods in Java 5?
They are synthetic They are generated by the compiler They are not necessary if the code does not use generics The compiler rejects code that directly calls a bridge method It is possible to call a bridge method using reflection
Explanation Bridge methods are inserted by the compiler to ensure correct overriding. They are sometimes necessary when overriding generic types and they are necessary for covariant method return types. So bridge methods are not limited to code using generics. A bridge method is synthetic and cannot be called directly but it can be called using reflection. Of course they should not be called and doing so may result in error, e.g. a ClassCastException, when calling a bridge method with wrong parameter types.
Well this is a deep topic and I don't think that it is a part of SCJP.
But to explain, let's take an example of covarient return types.
Now you must say that method() in Derived overrides method() in Base. But this is not the case. Actually return types are also part of method signature for JVM. So for JVM these two methods are overloaded. To solve this problem, compiler adds a bridge method in Derived class which calls the covarient overloaded method. I don't remember how that method is implemented by compiler...