如何使用特定实体类型来生成工厂?

问题描述:

我该如何基因化方法getBuilder使他不依赖于Object,而是依赖于UnitBuilderSourceBuilder的类型?如何使用特定实体类型来生成工厂?

public class BuilderFactory { 
    Object getBuilder (Object entity) throws UnsupportedResourceEntityType { 
     if (entity instanceof Source){ 
      return new SourceBuilder(); 
     } 
     if (entity instanceof Unit){ 
      return new UnitBuilder(); 
     } 
     throw new UnsupportedResourceEntityType(); 
    } 
} 
+0

是否有任何关系'SourceBuilder'和'UnitBuilder'? – Dici 2014-09-21 20:35:56

+0

那你为什么不用这个普通类型来替换Object呢?或者更好,通过这个普通类实现的接口。 – Dici 2014-09-21 20:38:18

+0

是的,但我要删除他们的超类(父类)。 – Alex 2014-09-21 20:38:39

为了知道它的类而*提供一个类的实例是没有意义的。你应该通过SourceBuilder.classUnitBuilder.class作为参数,所以你的方法是(我假设你保持一个共同的父茨艾伦两个类,这些类有一个默认的构造函数):

<T extends SuperType> T getBuilder (Class<T> clazz) { 
    return clazz.newInstance(); 
} 
+0

不!除了结果类上的实例外,我无法将任何东西传入getBuilder方法。 – Alex 2014-09-21 20:51:52

+0

其实我也不能使用Reflection API。 – Alex 2014-09-21 20:52:55

+0

为什么呢? – Dici 2014-09-21 20:53:22