java实例化类<?>变量
(注意:我在这个类似的领域搜索了多个关于SO的问题,但我从未遇到过与我的想法相关的答案)
考虑如果我有一个类或枚举{{CD1>},其中每个实例都有一个^ {CD2>}字段:
public enum Foo {
A (Integer.class), B (Double.class), C (String.class);
public final Class<?> type;
Foo(Class<?> type) {
this.type = type;
}
}
然后我有一个泛型类Bar<V>
:
public class Bar<V> {
private V value;
// default constructor
public Bar() {}
// getter
public V getValue(){
return value;
}
// setter
public void setValue(V value){
this.value = value;
}
}
在不知道Foo.type
的具体类型的情况下,是否可以使用给定Foo
的Class<?> type
字段中的类型实例化Bar
的实例?例如,我会在静态方法或某种工厂方法中调用它
编辑:
要指定Bar的函数,Bar使用一个简单的getter/setter包装一个值,并且有一个一致的接口,但类型未知。我的想法的好处是基于Foo实例创建Bar实例。例如,使用Foo.A.type
的值(即Integer.class
)实例化Bar<Integer>
,而不提前知道Foo.A.type
的值为Integer.class
# 1 楼答案
给定
Bar
类中的构造函数,为了实例化新的Bar<V>
对象,需要一个类型为V
的对象因此,您的问题转化为实例化类型为
Class<V>
的对象。更具体地说,假设Foo
类中存在一个Foo
对象和一个getType()
方法,您可以执行以下操作:然后,诀窍是
instantiate()
方法的实现。如果Class<V>
有一个无参数构造函数,那么您可以调用不过,并非所有类都有默认构造函数,因此没有适用于所有情况的通用解决方案