2011-09-30 55 views
4

如果你不知道整个包的路径,是否可以通过名称加载一个类?例如:加载类而不知道包?

getClassLoader().loadClass("Foo"); 

名为“Foo”的类可能在附近,可能不是 - 我不知道该包。我想获得匹配类及其包装(但不知道这是可能的!)的列表,

感谢

+3

你可能想看看这个:http://stackoverflow.com/questions/520328/can-you-find-all-classes-in-a-package-using-reflection –

+0

它也可以帮助,如果你告诉我们有一些关于你的用例的情况,以防止它有一个不太方便的方法。 – millimoose

回答

-2

据我所知,这是不可能的。但IDE帮助很大。在大多数IDE中,使用Ctrl - Space列出所有可能性。

这是在NetBeans中。正如你所看到的,它会告诉你盒子里的包装。

enter image description here

+2

当然,如果您需要在运行时执行此操作,那并不是很有用。 – millimoose

+1

@Sii这会是什么用例呢? – michael667

+0

询问OP?我的观点仍然是这样。 – millimoose

3

如果您不知道该包,则不知道该类的名称(因为它是完全限定类名的一部分),因此无法找到该类。

Java类的加载机制基本上只允许你做一件事:请求一个具有完全限定名称的类,并且类加载器将返回该类或不返回任何内容。而已。有没有办法要求部分匹配,或列出软件包。

3

与以前的答案,除了在这个问题@ reader_1000的答案链接到:

这基本上可以复制Java搜索要加载的类的逻辑,并查看所有类文件。图书馆可以处理这部分,我记得使用Reflections。通过非限定名称来匹配类并不是它们的主要用例,但是这个库似乎足够普遍,如果你四处游荡,这应该是可行的。请注意,这很可能是一个相当缓慢的操作。

+0

+1图书馆做他所要求的。 –