2013-06-28 39 views
0

我试图创建一个GWT应用程序下面的结构,虽然这确实是一个Java问题:爪哇 - 力实现的接口来扩展类

  1. ChatComponent是一个标记接口,在它没有方法;它旨在标记可包含ChatMessage的组件。
  2. 所有聊天组件都是小部件,但不知道究竟是什么类型;我想允许聊天组件扩展他们想要的任何内容。
  3. 但是,我还希望所有聊天组件都是Widget的一些扩展,并将其反映在代码中。

基本上我想要的是能够说

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

现在,这里的问题是显而易见的,接口不能扩展类,我不能使用抽象类,因为我想要的组件类能够扩展他们想要的任何东西;所以我不能在摘要中将Widget分类,然后再扩展它。

有没有一个干净的方式来做到这一点?如果它不能在类层次结构中完成,但只能使用泛型和通配符方法完成,那也适用于我,但我无法真正想出一个可行的方法。

+0

如果ChatComponent是一个接口,你将无法使用新的代码ChatComponent() – aglassman

回答

0

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

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

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

+1

很遗憾,这是行不通的,你根本无法像通配符那样添加到列表中。 – Marconius

+0

嗯,你是对的!我一直认为这是行得通的,我想我没有用列表试过。 – aglassman