【发布时间】:2021-07-12 19:30:39
【问题描述】:
给定一个泛型类Foo<T>,我想创建一个静态方法valueOf(String s)。 String s 应该包含一个类的名称(例如 "java.lang.Integer")。对valueOf("java.lang.Integer") 的调用应该会返回一个新对象Foo<Integer>。
在我的类中(见下面的代码),我想存储Class<T>,它作为参数传递给构造函数Foo(Class<T> clazz)。但是在valueOf-方法中,我不确定将什么参数传递给我想返回的对象的构造函数Foo(Class<T> clazz)。
由于我对 java 反射比较陌生,我不确定如何将这个逻辑实现到我的泛型类中。我了解到Class.forName(String) 方法返回一个对象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?
}
}
【问题讨论】:
-
"什么是 E,E 的类以及构造函数的参数?"你已经在 clazz 变量中有这个类。
标签: java generics tostring value-of