没有限定名称的Java反射 [英] Java Reflection without qualified name

查看:41
本文介绍了没有限定名称的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆