在我的项目中,我有一个包含简单转换器对象的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。该字符串稍后将用于查找相应的转换器。我需要的是得到一个类的引用,而不是类本身,这样我就可以在工厂中调用它。
暂无答案!
目前还没有任何答案,快来回答吧!