如果你不知道整个包的路径,是否可以通过名称加载一个类?例如:加载类而不知道包?
getClassLoader().loadClass("Foo");
名为“Foo”的类可能在附近,可能不是 - 我不知道该包。我想获得匹配类及其包装(但不知道这是可能的!)的列表,
感谢
如果你不知道整个包的路径,是否可以通过名称加载一个类?例如:加载类而不知道包?
getClassLoader().loadClass("Foo");
名为“Foo”的类可能在附近,可能不是 - 我不知道该包。我想获得匹配类及其包装(但不知道这是可能的!)的列表,
感谢
没有。 Java ClassLoader.loadClass(String)
method要求类名必须通过其包和类名完全限定(Java语言规范中的aka "Binary name")。
据我所知,这是不可能的。但IDE帮助很大。在大多数IDE中,使用Ctrl - Space列出所有可能性。
这是在NetBeans中。正如你所看到的,它会告诉你盒子里的包装。
当然,如果您需要在运行时执行此操作,那并不是很有用。 – millimoose
@Sii这会是什么用例呢? – michael667
询问OP?我的观点仍然是这样。 – millimoose
如果您不知道该包,则不知道该类的名称(因为它是完全限定类名的一部分),因此无法找到该类。
Java类的加载机制基本上只允许你做一件事:请求一个具有完全限定名称的类,并且类加载器将返回该类或不返回任何内容。而已。有没有办法要求部分匹配,或列出软件包。
即使你不知道包的名字,像jarFinder网站可能知道它
与以前的答案,除了在这个问题@ reader_1000的答案链接到:
这基本上可以复制Java搜索要加载的类的逻辑,并查看所有类文件。图书馆可以处理这部分,我记得使用Reflections。通过非限定名称来匹配类并不是它们的主要用例,但是这个库似乎足够普遍,如果你四处游荡,这应该是可行的。请注意,这很可能是一个相当缓慢的操作。
+1图书馆做他所要求的。 –
你可能想看看这个:http://stackoverflow.com/questions/520328/can-you-find-all-classes-in-a-package-using-reflection –
它也可以帮助,如果你告诉我们有一些关于你的用例的情况,以防止它有一个不太方便的方法。 – millimoose