java - 使用反射迭代包中的类的方法

标签 java eclipse reflection package

我目前正在学习反射,并且我在堆栈上看到了大多数与我的问题类似的帖子,但是,我认为他们没有完全回答我的问题。

我想知道 Eclipse 中是否有一个包,我可以使用反射来迭代包中的类以查找哪个类实现接口(interface)。只有 1 个接口(interface),因此他们要么实现它,要么不实现。

有人可以提供一个基本清晰的例子来说明我如何解决这个问题吗?有些人告诉我这是不可能的,而其他人则说使用反射是可能的。

感谢任何可以帮助解决此问题的人。

最佳答案

Reflection API 不提供直接迭代特定包中的类的工具。一旦你拥有了它,它就专注于发现它。

要实现您想要的目标,必须读取应用程序的类路径,迭代类路径,打开 jar 并进入目录,找到以 *.class 结尾的文件并获取它们作为资源,如 getResource(full_class_name) 或使用 Class.forName() 直接将其作为类获取。

此方法有一个限制:您将看不到自定义类加载器加载的类。

除非这是一个练习,否则我建议您使用 Reflections库可以满足您所需的一切,甚至(可能)更多...:)

更多细节

Java 系统属性“java.class.path”包含应用程序的类路径,在 Windows 上用 ; 分隔,在 Unix 上用 : 分隔。

因此,这是获取类路径元素列表的方法: System.getProperty("java.class.path").split(File.pathSeparator)

这里有一些代码示例可以帮助您开始:

for (String cpElement : System.getProperty("java.class.path").split(File.pathSeparator)) {
    File cpFile = new File(cpElement);
    if (!cpFile.exists()) {
         continue;
    }
    if (cpFile.isDirectory()) {
        findClassesInDirectory(cpFile);
    } else {
        findClassesInArchive(cpFile); 
    }
}

等等,我将把 findClassesInDirectory()findClassesInArchive() 的实现留给您。很好的锻炼。玩得开心。

关于java - 使用反射迭代包中的类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27355727/

相关文章:

java - NullPointerException应该叫NullReferenceException吗?

java - heroku Nodejs 应用程序 - events.js :167 Error Unhandled 'error' event : spawn java ENOENT

scala - 将 Class[_] 转换为 Universe.Type/Symbol

Python 的 getattr 被调用了两次?

java - 通过 CGLIB 代理时方法注释为 null

java - 使用 Maven 下载功能

java - 如何在 Jasmin 中创建数据池?

java - 查询数据存储时出现错误消息

eclipse - 更改 eclipse 的快速查看 View 颜色

java - Eclipse 中的预构建事件