7
public interface View{...

public interface Control<V extends View>{...

public class RemoteControl<C extends Control<V extends View>> implements Control<V>{...

在 RemoteControl 类的“V 扩展视图”上给了我一个“令牌“扩展”,,预期的语法错误。

我想以下替代方案是可能的

public class RemoteControl<C extends Control<V>,V extends View> implements Control<V>
{...

我仍然想知道这是否不能以更隐含的方式完成,因为后者需要对视图进行冗余声明。IE:

public class TVRemoteControl extends RemoteControl<TVControl,TvView> implements TVControl{...

对比

public class TVRemoteControl extends RemoteControl<TVControl> implements TVControl{...

也许我只是再次被困在一个盒子里,但是有没有可能以更优雅的方式获得“通用泛型”

4

1 回答 1

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>

如果您不关心对象的类型是什么ViewControl则无需Control输入RemoteControl

public class RemoteControl<C extends Control> implements Control{}

但是,事实Control是输入V extends Viewand RemoteControl implements Control<V>,而是建议您这样做...

于 2013-08-27T22:39:18.343 回答