Java 泛型的 valueOf 方法 class

Java valueOf method for generic class

给定一个泛型 class Foo<T>,我想创建一个静态方法 valueOf(String s)String s 应该包含 class 的名称(例如 "java.lang.Integer")。调用 valueOf("java.lang.Integer") 应该 return 一个新对象 Foo<Integer>.

在我的 class 中(见下面的代码),我想存储 Class<T>,它作为参数传递给构造函数 Foo(Class<T> clazz)。但是在 valueOf 方法中,我不确定要将什么参数传递给我喜欢的对象的构造函数 Foo(Class<T> clazz) return.

由于我对 java 反射比较陌生,所以我不确定如何将此逻辑应用到我的通用 class 中。我了解到 Class.forName(String) 方法 return 是一个对象 Class<?>,但我不知道如何找出通配符的类型?代表(如果可以使用反射),或者我在这个方向上错了吗?

public class Foo<T> {
    private Class<T> clazz;
    public Foo(Class<T> clazz) {
        this.clazz = clazz;
    }

    public static <E> Foo<E> valueOf(String s) throws ClassNotFoundException {
        Class<?> clazz = Class.forName(s);
        // here i am stuck. I would like to return new Foo<E>, 
        // but what is E, E's class and therefore the parameter for the constructor?
    }
}

你不能用泛型来做到这一点。泛型只是编译器静态地为您进行的强制转换。所以,如果你不能用你在代码中编写的强制转换来做到这一点(也就是说,你不能对不同的字符串进行不同的强制转换),你也不能用泛型来做到这一点。

您需要某种键而不是 String,它传达类型 T/E。可以直接传入Class<E>

    public static <E> Foo<E> valueOf(Class<E> clazz) throws ClassNotFoundException {
        // ...
    }