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

如何找到给定类名的包名?

晋天逸
2023-03-14
问题内容

给定一个类名作为字符串,如何在运行时获取它的包名?我没有带有包名+类名的完全限定名称。仅是类名。

我想在Class.forName()方法中使用包名。

找到第一个匹配的软件包名称(如果多个软件包具有相同的类),就可以了。

有任何想法吗?

更新

我没有要处理的Class实例。我的要求是使用该Class.forName()方法创建一个Class
。但是我只是将类名作为字符串。我需要某种方法来遍历软件包并确定我所拥有的类是否属于该软件包。

异常的堆栈跟踪为

Exception in thread "main" java.lang.ClassNotFoundException: MyAddressBookPage
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)

问题答案:

这很可能是一种非常低效,an肿,不便的方式来完成您要实现的目标,希望已经有了一种现成的,单一的方式来实现目标……但是应该可以。

基本上,扫描类路径中的每个类,直到找到getSimpleName()与您所拥有的类名称匹配的类。

我建议您查看Google Classpath Explorer,以帮助您进行管理。

它可能看起来像这样:

 ClassPath classpath = new ClassPathFactory().createFromJVM();
 RegExpResourceFilter regExpResourceFilter = new RegExpResourceFilter(".*", ".*\\.class");
 String[] resources = classpath.findResources("", regExpResourceFilter);

resources是一个字符串数组,例如“ com / foo / bar /
Baz.class”。现在,您可以简单地循环查找匹配的条目,并将其从斜杠转换为点分,删除“ .class”等。请谨慎尝试匹配内部类,因为它们中将带有“
$”字符。

而且,据我所知,这 不会 导致那些类被加载。



 类似资料:
  • 问题内容: 我需要一种工作方法来获取所有从Python基类继承的类。 问题答案: 新型类(即objectPython中默认的from的子类)具有一种返回子类的方法: 这是子类的名称: 这是子类本身: 确认确实将子类Foo列为其基础: 请注意,如果需要子类,则必须递归: 请注意,如果尚未执行子类的类定义(例如,如果尚未导入子类的模块),则该子类尚不存在,也将找不到它。 你提到“给定名称”。由于Pyt

  • 问题内容: 如何去尝试找到Java中给定类的所有子类(或给定接口的所有实现者)?到目前为止,我有一种方法可以执行此操作,但是我发现它效率很低(至少可以这样说)。方法是: 获取类路径上存在的所有类名称的列表 加载每个类并测试以查看它是否是所需类或接口的子类或实现者 在Eclipse中,有一个很好的功能,称为类型层次结构(Type Hierarchy),可以很有效地显示它。如何进行编程? 问题答案:

  • 问题内容: 对于Java开发人员来说,这必须是一个非常基本的问题,但是在给定 类名* 的情况下找到合适的 jar文件 的最佳方法是什么? * 例如,给定“ com.ibm.websphere.security.auth.WSSubject ”,您如何跟踪适当的jar文件?(“ google”不是我要找的答案!) 在Java文档不给jar文件的任何暗示,明显的jar文件的名称本身不提供线索。 在Ja

  • 在加权无向图中,我需要找到一个包含给定边“e”的最小生成树,如果可能的话。我该怎么做呢?Kruskal从“e”开始?

  • 问题内容: 我为方法提供了一个简单的标记注释(类似于 有效Java (第2版)第35条中的第一个示例): 然后,在给定的包(例如)中,它有一些包含20个类的子包,我想找到所有带有注释的方法。(因为我想对单元测试中所有带注释的方法进行一些检查。) 最简单的方法是什么?最好不要添加新的第三方库或框架。 编辑 :进行澄清,显然将是检查方法是否具有注释的方法- 但此问题包括查找所有方法。 问题答案: 如果

  • 导入: 是由路径\org\apache\log4j\Logger确定的包名“org.apache.log4j”。班