I am trying to write something like
public class A implements B<T implements C> {}
and
public abstract class M<I extends P> extends R<I extends P> implements Q<I extends P> {}
but I am getting errors like Multiple markers and syntax error on token extends, expected. Please let me know what is the correct way of doing this.
Yes. you can happily do it.
Java Generic Classes and SubtypingWe can subtype a generic class or interface by extending or implementing it. The relationship between the type parameters of one class or interface and the type parameters of another are determined by the extends and implements clauses.
To implement generics, the Java compiler applies type erasure to: Replace all type parameters in generic types with their bounds or Object if the type parameters are unbounded. The produced bytecode, therefore, contains only ordinary classes, interfaces, and methods.
When you have interfaces in generics, you still have to use the extends
keyword.
In your case, if you know what T
will be :
public class A<T extends C> implements B<T> {}
If you don't and you simply have to implements B
with a C
type :
public class A implements B<C> {}
For the second part, once you've defined I
you can use it as is in your other generic types :
public abstract class M<I extends P> extends R<I> implements Q<I> {}
There is no implements
keyword in generic bounds. It's only extends
Furthermore - you should specify the type parameter only in the class definition, and not in supertypes. I.e.
public class A<T extends C> implements B<T> {}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With