【问题标题】:Java - force implemented interface to extend a classJava - 强制实现接口以扩展类
【发布时间】:2013-06-28 15:46:01
【问题描述】:

我正在尝试在 GWT 应用程序中创建以下结构,但这确实是一个 Java 问题:

  1. ChatComponent 是一个标记接口,里面没有方法;它旨在标记可以包含ChatMessage 的组件。
  2. 所有聊天组件都是小部件,但具体是什么不知道;我想允许聊天组件随心所欲地扩展。
  3. 但是,我还希望所有聊天组件都是 Widget 的某种扩展,并在代码中反映出来。

基本上我想要的是能够说出来

List<Widget> list = new ArrayList<>();
list.add(new ChatComponent());

现在这里的问题很明显,接口不能扩展类,我不能使用抽象类,因为我希望组件类能够扩展他们想要的任何东西;所以我不能只是在抽象中继承 Widget 然后扩展它。

有没有一种巧妙的方法来做到这一点?如果它不能在类层次结构中完成,但只能在具有泛型和通配符的方法中完成,那也适用于我,但我也想不出一个好的方法。

【问题讨论】:

  • 如果 ChatComponent 是一个接口,你将无法使用代码 new ChatComponent()

标签: java class inheritance interface


【解决方案1】:

使用通用通配符可能会起作用。创建一个 ChatComponent 接口。

List<? extends ChatComponent> list = new ArrayList<>();
list.add(new MyChatComponent());

MyChatComponent.class 应该是一个 Widget 并实现 ChatComponent 接口。

【讨论】:

  • 遗憾的是这不起作用,您根本无法使用这样的通配符添加到列表中。
  • 嗯,你是对的!我一直认为这行得通,我想我没有用列表尝试过。
猜你喜欢
  • 2012-10-08
  • 2012-12-10
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
  • 2018-08-09
相关资源
最近更新 更多