繁体   English   中英

如何正确生成使用Reflection API返回实例的方法?

[英]How to proper generify a method which returns an instance using Reflection API?

我想按Class类型检索实例。 但是现在我在泛型方面苦苦挣扎。 我的代码不起作用,我也不知道为什么。 这里是:

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展示。

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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM