有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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的具体类型的情况下,是否可以使用给定FooClass<?> type字段中的类型实例化Bar的实例?例如,我会在静态方法或某种工厂方法中调用它

编辑:

要指定Bar的函数,Bar使用一个简单的getter/setter包装一个值,并且有一个一致的接口,但类型未知。我的想法的好处是基于Foo实例创建Bar实例。例如,使用Foo.A.type的值(即Integer.class)实例化Bar<Integer>,而不提前知道Foo.A.type的值为Integer.class


共 (1) 个答案

  1. # 1 楼答案

    给定Bar类中的构造函数,为了实例化新的Bar<V>对象,需要一个类型为V的对象

    因此,您的问题转化为实例化类型为Class<V>的对象。更具体地说,假设Foo类中存在一个Foo对象和一个getType()方法,您可以执行以下操作:

    Foo foo = ... // Existing Foo object
    Class<V> type = foo.getType();
    V value = instantiate(type); // TODO: Implement instatiate()
    Bar<V> bar = new Bar(value);
    

    然后,诀窍是instantiate()方法的实现。如果Class<V>有一个无参数构造函数,那么您可以调用

    V value = type.newInstance();
    

    不过,并非所有类都有默认构造函数,因此没有适用于所有情况的通用解决方案