Java的接口集合

时间:2012-06-06 13:48:48

标签: java

考虑将DataContainer中包含的对象分发给客户

// Will be handed out
public interface DataContainer 

为了使用它,客户端当前需要知道将对象强制转换为:

public interface ConcreteObject_1_Container extends DataContainer
public interface ConcreteObject_2_Container extends DataContainer

是否可以同时提供ConcreteObject1ContainerConcreteObject2Container作为选项,类似于Enum选项的选择方式?

而不是用户神奇地知道使用FileContainer

                                   // user knows
FileContainer   fileContainer   = (FileContainer) 
                ContainerFactory.getContainerFor(DataSource.FILE, 
                                                 TREAT_AS_SOURCE);

我想

                                  // user selects
FileContainer   fileContainer   = (GenericContainer.FileContainer) 
                ContainerFactory.getContainerFor(DataSource.FILE, 
                                                 TREAT_AS_SOURCE); 

2 个答案:

答案 0 :(得分:6)

你应该改变你的设计。之一:

  1. 客户端只使用DataContainer上的方法,而不关心它是什么实现,在这种情况下可以避免强制转换,或
  2. 客户端实际上与实现耦合,因此应该直接使用实现类型(例如,使用两种不同的方法)

答案 1 :(得分:0)

如果你可以使getConatainer为泛型方法,那么它将能够使用类型推断返回特定类型。

相关问题