java - 如何使用 Reflection API 正确泛化返回实例的方法?

标签 java generics reflection

我想按类类型检索实例。但现在我正在与泛型作斗争。我的代码不起作用,我也不知道为什么。这是:

public class Main {
    public static void main(String[] args) throws Exception {
        Provider provider = new Provider("prop");
        AbstractHolder obj = provider.create(DefaultHolder.class);
        System.out.println(obj.getProperty());
    }
}

具有损坏的 create 方法的提供程序类

public class Provider {
    private String property;

    public Provider(String property) {
        this.property = property;
    }

    public <T> create (Class<T> type) throws Exception {
        return type.getConstructor(String.class).newInstance(property);
    }
}

这是我的 Holder impl。

public class DefaultHolder extends AbstractHolder {
    public DefaultHolder(String field) {
        super(field);
    }
}

和AbstractHolder抽象类。

public abstract class AbstractHolder {
    private String property;

    public AbstractHolder(String property) {
        this.property = property;
    }

    public String getProperty() {
        return property;
    }
}

有什么想法可以修复我的 Provider 类中的泛型吗?

附注

问题出在这个方法

public <T> create (Class<T> type) throws Exception {
    return type.getConstructor(String.class).newInstance(property);
}

最佳答案

试试这个:

public class Main {
    public static void main(String[] args) throws Exception {
        Provider provider = new Provider("prop");
        AbstractHolder obj = provider.create(DefaultHolder.class);
        System.out.println(obj.getProperty());
    }
}

public class Provider {
    private String property;

    public Provider(String property) {
        this.property = property;
    }

    public <T extends AbstractHolder> T create(Class<T> type) throws InstantiationException, IllegalAccessException, IllegalArgumentException, SecurityException, InvocationTargetException, NoSuchMethodException {
        return type.getConstructor(property.getClass()).newInstance(property);
    }
}

关于java - 如何使用 Reflection API 正确泛化返回实例的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24605960/

相关文章:

java - 使用 Jmeter 对登录功能进行一些测试后,在范围内找不到 bean userList

generics - f# 成员约束和 IEnumerable 集合

c# - Linq 表达式返回第一个采用 1 个字符串参数的重载方法

c# - 如何从方法符号中获取 MethodInfo

java - 如何在 Jersey WADL 中包含类型同时返回 Response

java - RestAssured 不遵守 Quarkus 中的 ObjectMapper 配置

java - TestNG::如何在 TestMethod 中获取 TestSuite 名称?

c# - 是否可以在类中定义任何类型的列表,它可以包含任何类型的列表

c# - 将类型参数传递给用于指定泛型类型的方法

java - J2ME 中的自定义反射