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

时间:2014-09-21 20:31:37

标签: java generics design-patterns refactoring

如何使方法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();
    }
}

1 个答案:

答案 0 :(得分:0)

被迫提供类的实例只是为了知道它的类是没有意义的。您应该将SourceBuilder.classUnitBuilder.class作为参数传递,因此您的方法将是(我假设您为两个类保留了一个共同的超类型,并且这些类具有默认构造函数):< / p>

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