Java 使用在运行时获取的类型参数创建泛型实例
Java create generic instance with type parameter obtained at runtime
我有一个 class 这样的:
public class Pojo<T, P> {}
我在编译时知道 T 的类型,但我不知道 P 的类型。我想知道这样的事情是否可能:
Class<Integer> t = Integer.class;
field = new Pojo<Integer, t>();
如果不是,则该问题的任何替代解决方案都是有效的 ;)
编辑:
我正在尝试从 POJO 字段获取统计信息,即我有一个 class AirRegister,其中包含字段 station、o3、so2、altitude、latitude... 我想获取这些字段的模式。用户可以将具有任何字段类型的任何类型发送到程序,因此在运行时字段类型是未知的。
示例:
public static void main(String[] args) {
String field = args[0];
Class<fieldType> type = AirRegister.class.getDeclaredField(field).getClass();
ModeImpl<AirRegister, type> p = new ModeImpl<AirRegister, type>();
}
这是不可能的。泛型只是编译时的特性。编译器使用它们对您的源代码进行类型检查,但在 运行 时它们消失了。
如果您需要实施 运行 次类型检查,您可以使用 Class
个实例来存储所需的类型。例如:
class Pojo<T> {
private Class<?> clazz;
Pojo(Class<?> clazz) {
this.clazz = clazz;
}
void doSomething(T arg1, Object arg2) {
if (!clazz.isInstance(arg2)) {
throw new ClassCastException();
}
...
}
}
我有一个 class 这样的:
public class Pojo<T, P> {}
我在编译时知道 T 的类型,但我不知道 P 的类型。我想知道这样的事情是否可能:
Class<Integer> t = Integer.class;
field = new Pojo<Integer, t>();
如果不是,则该问题的任何替代解决方案都是有效的 ;)
编辑: 我正在尝试从 POJO 字段获取统计信息,即我有一个 class AirRegister,其中包含字段 station、o3、so2、altitude、latitude... 我想获取这些字段的模式。用户可以将具有任何字段类型的任何类型发送到程序,因此在运行时字段类型是未知的。
示例:
public static void main(String[] args) {
String field = args[0];
Class<fieldType> type = AirRegister.class.getDeclaredField(field).getClass();
ModeImpl<AirRegister, type> p = new ModeImpl<AirRegister, type>();
}
这是不可能的。泛型只是编译时的特性。编译器使用它们对您的源代码进行类型检查,但在 运行 时它们消失了。
如果您需要实施 运行 次类型检查,您可以使用 Class
个实例来存储所需的类型。例如:
class Pojo<T> {
private Class<?> clazz;
Pojo(Class<?> clazz) {
this.clazz = clazz;
}
void doSomething(T arg1, Object arg2) {
if (!clazz.isInstance(arg2)) {
throw new ClassCastException();
}
...
}
}