当前位置: 首页 > 面试题库 >

没有限定名称的Java反射

赖渊
2023-03-14
问题内容

我正在尝试使用Java做反射 Class c = Class.forName(className)

我想在通过className不指定包名作为字符串className将包含多个子包中的类说com.A.*com.B.*....com.Z.*

可能吗?

如果在这种情况下我有很多子包,那么进行大小写切换以预先挂在不同的子包上是不可行的。


问题答案:

首先,使用Reflections库获取所有类

 Reflections reflections = new Reflections();

 Set<Class<?>> allClasses = reflections.getSubTypesOf(Object.class);

接下来,建立一个查找映射。

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

当您需要查找课程时,您可以执行以下操作:

Class<?> clazz = classBySimpleName.get(className);


 类似资料:
  • 本文向大家介绍Java获取具有其(完全限定的)名称的类,包括了Java获取具有其(完全限定的)名称的类的使用技巧和注意事项,需要的朋友参考一下 示例 给定一个String包含类名的Class对象,可以使用Class.forName以下对象访问它的对象: Java SE 1.2 可以指定是否初始化类(的第二个参数forName)以及ClassLoader应该使用哪个类(第三个参数):

  • 问题内容: 我想获取给定类的所有子类及其完全限定名称的列表。我想从Eclipse复制它并粘贴到这样的文本文件中: 我试过了: 在做。 但是 出于某些奇怪的原因,这个列表没有列出子类的子类,而只列出了直接子孙。 类的打开视图,该视图在树组件中打印所有子类, 但是 此视图不允许我选择所有行并复制其名称。 还有其他技巧吗?有数百种课程,因此我想避免手动进行。 问题答案: 按照http://internn

  • 问题内容: 就像标题所说的那样,有没有办法解决这个问题?我已经导入了两个单独的第三方库,它们具有完全限定的类名冲突。 现在,两个库都以jar形式导入,并且似乎在某些环境(命令行调用,Eclipse)中找到了正确的类,而在其他环境(Maven)中则找到了错误的类,并且我得到了缺少的方法异常。如果找不到解决方案,那么我可以回过头来重构这些库之一并重新构建jar,但是我宁愿不必在每次库更新时都重复该工作

  • 反射类和方法以及类加载器等都需要使用所谓的“二进制”类名。 类的完全限定名为。然而,要获得类对象,需要编写: 而不是 因为恰好是的内部类。

  • 问题内容: 我找不到关于SO的Q / A来回答我的 确切 问题,所以我想我将其发布并看看会回来什么。 就Java包的命名约定而言,我知道它应该是反向域名:并且我得到了关于不混合大小写,连字符,关键字等的规则。 我还阅读了Java语言规范的7.7节(唯一包名称)。据我所知,Java的规则是使用反向域来确保唯一性……如果您没有,请去获取一个: -第7.7节 因此,如果我对花钱买一个域名不感兴趣,那么我

  • 在使用MapStruct、Lombock和Spring时,我在Tomcat 9中的应用程序部署中遇到以下错误: 我的spring配置类在包层次结构的根目录中设置包扫描。映射器的实现也是在target/generated-sources下生成的: 我的错误表明Spring找不到实现类,我遗漏了什么?我试图将generated-sources文件夹添加到构建路径并将其包含在包扫描中,但没有成功。