public interface View{...
public interface Control<V extends View>{...
public class RemoteControl<C extends Control<V extends View>> implements Control<V>{...
给我一个“令牌上的语法错误”扩展“,预期”在RemoteControl类的“V extends View”上。
我想以下替代方案是可能的
public class RemoteControl<C extends Control<V>,V extends View> implements Control<V>
{...
我仍然想知道这是否不能以更隐式的方式完成,因为后者需要View的冗余声明。即:
public class TVRemoteControl extends RemoteControl<TVControl,TvView> implements TVControl{...
VS
public class TVRemoteControl extends RemoteControl<TVControl> implements TVControl{...
也许我只是被困在一个盒子里,但是有可能以更优雅的方式获得“泛型泛型”
答案 0 :(得分:4)
你建议:
我想以下替代方案是可能的
public class RemoteControl<C extends Control<V>,V extends View> implements Control<V>{}
这是正确的解决方案,虽然我通常把它写成(为了便于阅读):
public class RemoteControl<V extends View, C extends Control<V>> implements Control<V>{}
您在RemoteControl
对象上键入Control
,该对象也在extends View
对象上键入。因此,您需要提供View
的实现,该实现会键入键入您的Control
对象的RemoteControl
对象。
我想你可以解释你的问题,为什么我必须提供V
- 不应该从<C extends Control<V>>
隐含。答案是否,您需要为V
提供一种类型,以确保提供正确类型的Control
(即extends Control<V>
)
如果您不关心输入View
对象的Control
类型,则无需在Control
中输入RemoteControl
:
public class RemoteControl<C extends Control> implements Control{}
但是,事件Control
是在V extends View
和RemoteControl implements Control<V>
上输入的,而是建议你这样做......