public interface View{...
public interface Control<V extends View>{...
public class RemoteControl<C extends Control<V extends View>> implements Control<V>{...
gives me a "Syntax error on token "extends", , expected" on "V extends View" for the RemoteControl class.
I guess the following alternative was possible
public class RemoteControl<C extends Control<V>,V extends View> implements Control<V>
{...
Still I wonder if this cannot be done in a more implicit way since the latter would require a redundant declaration of the View. I.e.:
public class TVRemoteControl extends RemoteControl<TVControl,TvView> implements TVControl{...
vs
public class TVRemoteControl extends RemoteControl<TVControl> implements TVControl{...
Maybe I'm just stuck in a box again, but is it possible to get the "generic Generics" in a more elegant way
You suggest:
I guess the following alternative was possible
public class RemoteControl<C extends Control<V>,V extends View> implements Control<V>{}
This is the correct solution, although I would normally write it as (for readability):
public class RemoteControl<V extends View, C extends Control<V>> implements Control<V>{}
You are typing RemoteControl
on a Control
object which is also typed on an object that extends View
. As such you need to provide the implementation of View
that types the Control
object that types your RemoteControl
object.
I guess you could interpret your question as saying, why do I have to provide V
- shouldn't it be implied from the <C extends Control<V>>
. To which, the answer is no, you need to provide a type for V
to ensure that the right type of Control
is provided (i.e. that it extends Control<V>
)
If you don't care what type View
the Control
object is typed on, you don't need to type Control
in the RemoteControl
:
public class RemoteControl<C extends Control> implements Control{}
However, the fact Control
is typed on V extends View
and RemoteControl implements Control<V>
, rather suggests that you do...
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