3

考虑包裹的对象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); 
4

2 回答 2

6

你可能应该改变你的设计。任何一个:

  1. 客户端只使用 on 上的方法DataContainer,而不关心它是什么实现,在这种情况下可以避免强制转换,或者
  2. the client is actually coupled to the implementation, so should just use the implementation types directly (e.g. with two different methods)
于 2012-06-06T14:02:51.540 回答
0

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

于 2012-06-06T13:53:18.043 回答