Other |
---|
tbdUnresolved |
Duplicate :
|
|
Duplicate :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
A DESCRIPTION OF THE REQUEST : When a subtype restricts the bounds of a type variable of its supertype, any inherited methods with a return type of that variable should have a bridge method created. Currently, moving such a method from the derived to base type will cause binary incompatibility. Care needs to be exercised for protected methods inherited across packages. JUSTIFICATION : It should be possible to move such methods to super types, without binary incompatibility. EXPECTED VERSUS ACTUAL BEHAVIOR : EXPECTED - $ /usr/java/jdk1.6.0/bin/javap Derived Compiled from "Derived.java" public class Derived extends Base{ public Derived(); Derived getThis(); Base getThis(); public Derived function(); } ACTUAL - $ /usr/java/jdk1.6.0/bin/javap Derived Compiled from "Derived.java" public class Derived extends Base{ public Derived(); Derived getThis(); Base getThis(); } with 1.5.0_04: C:\>javac Derived.java C:\>javap Derived Compiled from "Derived.java" public class Derived extends Base{ public Derived(); Derived getThis(); Base getThis(); } ---------- BEGIN SOURCE ---------- abstract class Base<THIS extends Base> { abstract THIS getThis(); public THIS function() { return getThis(); } } public class Derived extends Base<Derived> { Derived getThis() { return this; } } ---------- END SOURCE ---------- CUSTOMER SUBMITTED WORKAROUND : Override all methods with this problem.
|