Java通用工厂实现

时间:2016-10-18 09:02:25

标签: java generics factory

解释我要做的事情的最好方法可能是代码。

Public class Product
Public class Vendor<T extends Product>

现在我正在尝试创建一个通用工厂,它将根据字符串输入参数

为您提供供应商
   Public Factory {
      public Vendor getInstance(String Type){
          Class cls = Class.forName(Type);
          return new Vendor<cls>();
      }
   }

我如何能够创建这个通用工厂?

2 个答案:

答案 0 :(得分:1)

好吧,如果您绝对想要根据收到的参数创建供应商,则应使用Class而不是字符串。您也可以参数化您的方法,以确保您收到T extends Product类型。

public class Main {

    static class Product {}
    static class SubProd extends Product {}
    static class Vendor<T extends Product> {}

    public static <T extends Product> Vendor<T> getInstance(Class<T> clazz) {
        return new Vendor<T>();
    }

    public static void main(String[] args) {
        Vendor<SubProd> v = Main.getInstance(Main.SubProd.class);
        System.out.println(v);
    }
}

如您所见,class参数未直接使用,但它用于强制返回的供应商类型。此代码编译并运行时没有警告,异常或强制转换。使用String时,您必须处理可能发生的所有异常,并且可能会在这里和那里进行丑恶的转换。

泛型非常强大,我相信这些小例子展示了他们可以做些什么。但是,请注意,有时候,有更简单,更优雅的方法来解决问题。

答案 1 :(得分:0)

您不能这样做,因为编译器在编译过程中会在内部使用泛型类型信息。

您可能希望将通用类类型发送到工厂:

rcleartool