创建类并从字符串

时间:2016-09-01 13:02:43

标签: java

我在创建对象时遇到问题。

基本上我想通过最初的字符串来创建给定类的对象。我知道使用Class.forName(field)有效,但不是我的情况,我会告诉你为什么在下面。我考虑过反思,但担心它会导致同样的问题。

我现在的代码是(模板是一个字符串):

int n = template.length();
String field = at.getFieldName().trim();
field = field.substring(0, field.length() - 1); 
Class<?> correctClass = Class.forName(field);
UniqueEntity<correctClass> ue = new UniqueEntity<correctClass>();

我得到的错误消息是correctClass无法解析为某种类型。

2 个答案:

答案 0 :(得分:0)

使用Class.forName()方法后,您获得Class实例(变量correctClass)调用方法getConstructor()getConstructors()以获取类{{}的实例1}}。获得类Constructor的实例后,调用方法Constructor来获取类的实例。这是一个例子:

newInstance()

所有这些假设您的类具有默认构造函数。

答案 1 :(得分:0)

为了能够使用反射类的类型创建UniqueEntity,您需要将类类型传递给通用辅助方法。

private static <T> UniqueEntity<T> createEntity(Class<T> clazz) {
    return new UniqueEntity<T>(clazz);
}

代码

import java.lang.reflect.Type;

public class Generic {
    public static void main(String[] args) {
        try {
            String field = "java.lang.Integer";
            UniqueEntity<?> entity = fromField(field);

            System.out.println(entity);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static UniqueEntity<?> fromField(String field) throws ClassNotFoundException {
        return createEntity(Class.forName(field));
    }

    private static <T> UniqueEntity<T> createEntity(Class<T> clazz) {
        return new UniqueEntity<T>(clazz);
    }

    private static class UniqueEntity<T> {
        private final Type type;

        public UniqueEntity(Class<T> clazz) {
            this.type = clazz.getGenericSuperclass();
        }

        @Override
        public String toString() {
            return "UniqueEntity [type=" + type + "]";
        }
    }
}