考虑将DataContainer
中包含的对象分发给客户
// Will be handed out
public interface DataContainer
为了使用它,客户端当前需要知道将对象强制转换为:
public interface ConcreteObject_1_Container extends DataContainer
public interface ConcreteObject_2_Container extends DataContainer
是否可以同时提供ConcreteObject1Container
和ConcreteObject2Container
作为选项,类似于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);
答案 0 :(得分:6)
你应该改变你的设计。之一:
DataContainer
上的方法,而不关心它是什么实现,在这种情况下可以避免强制转换,或答案 1 :(得分:0)
如果你可以使getConatainer为泛型方法,那么它将能够使用类型推断返回特定类型。