没有限定名称的Java反射 [英] Java Reflection without qualified name
本文介绍了没有限定名称的Java反射的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用 Class c = Class.forName(className)
我想传递 className
而不指定包名称,因为字符串 className
将包含来自多个子包的类,例如 com.A. *
, com.B.*
.... com.Z.*
I want to pass in the className
without specifying the package name as the String className
will contain classes from multiple sub-packages say com.A.*
,com.B.*
.... com.Z.*
有可能吗?
如果我在这种情况下有很多子包,那么进行大小写切换以预先挂在不同的子包上是不可行的.
It will not be feasible to do a case switch to pre-pend the different sub-packages if I have many sub-packages in this case.
推荐答案
首先,使用倒影库
Reflections reflections = new Reflections();
Set<Class<?>> allClasses = reflections.getSubTypesOf(Object.class);
接下来,建立一个查找映射.
Next, build up a lookup-map.
// Doesn't handle collisions (you might want to use a multimap such as http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Multimap.html instead)
Map<String, Class<?>> classBySimpleName = new HashMap<>();
for(Class<?> c : allClasses) {
classBySimpleName.put(c.getSimpleName(), c);
}
当您需要查找课程时,您将执行以下操作:
When you need to lookup a class you'll do:
Class<?> clazz = classBySimpleName.get(className);
这篇关于没有限定名称的Java反射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文