【问题标题】:accessing classes from a directory without knowing directory content在不知道目录内容的情况下从目录访问类
【发布时间】:2017-11-13 01:57:05
【问题描述】:

如果我提供了一个目录的地址,但我没有关于目录中内容的信息,我是否可以检查该目录是否包含任何类并通过URLClassLoader 访问这些类。

我目前正在使用目录地址创建一个 URL 数组:

URL [] urls = new URL[1];
urls[0] = new File(address).toURI().toURL();
URLClassLoader urlClassLoader = new URLClassLoader(urls);

但是,即使使用这种方法,我也无法从 URLClassLoader 对象访问类,因为我不知道这些类叫什么,对吧?

【问题讨论】:

  • walking the file tree 并加载您找到的每个“.class”文件怎么样?
  • 你说得对,Java 故意不提供枚举包中类的方法。有一个 Guava 实用程序可以查看加载程序、获取目录并为您枚举 .class 文件。
  • 我不知道你为什么需要这个,但我怀疑通过让可发现的类实现一个接口并将该接口作为服务提供者接口来为你提供更好的服务,如ServiceLoader documentation 中所述.

标签: java reflection urlclassloader


【解决方案1】:

您最有可能得到的是The Guava ClassPath class。但是,这是通过查看 URLClassLoader 然后与文件系统对话来实现的。

【讨论】:

  • 那么getAllClasses返回目录中所有类的集合?
  • 是的,有一些警告。阅读源代码。
猜你喜欢
  • 2014-05-08
  • 2013-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多