来自Class对象的Java参数化类型

时间:2013-11-08 20:54:45

标签: java generics

假设我有一个名为Foo的类,它具有泛型类型。

public class Foo<T> { ...

我还有一个名为Foo Factory的非参数化类,可以生成Foos。

public class FooFactory {
    public static Foo createFoo() { 
        return new Foo();
    }
}

有没有办法将Class clazz参数传递到createFoo,以便我可以创建Foo<clazz>

public class FooFactory {
    public static Foo createFoo(Class clazz) {
        return new Foo<clazz>();
    }
}

2 个答案:

答案 0 :(得分:3)

使createFoo工厂方法通用:

public static <T> Foo<T> createFoo(Class<T> clazz) {
    return new Foo<T>();
}

事实证明,你甚至不需要clazz; Java会为你推断<T>,所以这就足够了:

public static <T> Foo<T> createFoo() {
    return new Foo<T>();
}

答案 1 :(得分:0)

只需将createFoo函数设为通用:

public static <T> Foo<T> createFoo() {
    return new Foo<>();
}

返回Foo<T>类型的实例,并对任何类型T执行此操作。通过在方法签名的开头编写<T>来指示这一点,该签名将T声明为新的类型变量,指定createFoo()是通用方法。

退房:Generic Methods