从反射返回对类的引用以在工厂中调用构造函数

qxgroojn  于 2021-06-27  发布在  Java
关注(0)|答案(0)|浏览(181)

在我的项目中,我有一个包含简单转换器对象的java包。这些对象有一个函数:“convert”。此函数将参数转换为其他格式。
一旦我把另一个类添加到Map上,我就会给这个类一个注解,这样我就可以找到带有反射的类。
现在我看到,有时类需要一个额外的参数,例如,当我有一个分裂转换器。我认为最好的方法是在调用类时在构造函数中设置参数。
我现在要做的是,只要反射看到转换器,它就会自动创建类的新示例。

public static Map<String, IConverter> getConverterMappings() {
    Reflections reflections = new Reflections("prefix.domainname.project.utils.converters");
    Set<Class<?>> converterClasses = reflections.getTypesAnnotatedWith(Converter.class);

    return converterClasses.stream()
            .collect(Collectors.toMap(
                    converterClass -> converterClass.getAnnotation(Converter.class).name(),
                    ConverterFinderImpl::createNewInstanceOfClass
            ));
}

private static <T> IConverter createNewInstanceOfClass(Class<T> someClass) {
    try {
        return (IConverter) someClass.getDeclaredConstructor().newInstance();
    } catch (Exception e) {
        throw new IllegalArgumentException(e);
    }
}

如您所见,它返回一个带有字符串和转换器类的Map。该字符串稍后将用于查找相应的转换器。我需要的是得到一个类的引用,而不是类本身,这样我就可以在工厂中调用它。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题