简体   繁体   English

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

[英]Java Parameterized Type from Class object

Let's say I have a class called Foo with a generic type. 假设我有一个名为Foo的类,具有通用类型。

public class Foo<T> { ...

And I have another, non parameterized class called Foo Factory that generates Foos. 我还有另一个非参数化的类,称为Foo Factory,它生成Foos。

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

Is there any way to pass a Class clazz parameter into createFoo so that I can create a Foo<clazz> ? 有什么方法可以将Class clazz参数传递到createFoo以便我可以创建Foo<clazz>吗?

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

Make the createFoo factory method generic: 使createFoo工厂方法通用:

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

Well as it turns out, you don't even need clazz ; 事实证明,您甚至不需要clazz Java will infer <T> for you, so this will suffice: Java将为您推断<T> ,因此就足够了:

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

Just make the createFoo function generic: 只需使createFoo函数通用:

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

returns an instance of type Foo<T> and does so for any type T . 返回类型为Foo<T>的实例,并且对任何类型T都这样做。 This is indicated by writing <T> at the beginning of the method signature, which declares T as a new type variable, specifying that createFoo() is a generic method. 这可以通过在方法签名的开头写入<T>来表明,该方法将T声明为新的类型变量,并指定createFoo()是通用方法。

Check out : Generic Methods 签出: 通用方法

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM