如果您不知道整个包路径,是否可以按名称加载类?类似的东西:
getClassLoader().loadClass("Foo");
名为“Foo”的类可能在附近,可能不是 - 我不知道包。我想获得一个匹配类及其包的列表(但不确定是否可能!),
由于
答案 0 :(得分:5)
不。 Java ClassLoader.loadClass(String)
method要求类名必须通过其包和类名完全限定(Java语言规范中的aka "Binary name")。
答案 1 :(得分:3)
如果您不知道包,则不知道类的名称(因为它是完全限定类名的一部分),因此无法找到该类。
Java类加载机制基本上只允许你做一件事:要求一个具有完全限定名的类,而类加载器将返回类或什么也不返回。而已。没有办法要求部分匹配或列出包。
答案 2 :(得分:3)
与之前的答案相反,除了@ reader_1000链接到的问题的答案:
这可以通过基本上复制Java搜索要加载的类的逻辑并查看所有类文件来实现。处理此部分的库可用,我记得使用Reflections。通过非限定名称匹配类不是它们的主要用例,但是库看起来很通用,如果你四处寻找,这应该是可行的。请注意,这很可能是一个相当慢的操作。
答案 3 :(得分:1)
Class.forName(new Reflections("com.xyz", new SubTypesScanner(false)).getAllTypes().stream()
.filter(o -> o.endsWith(".Foo"))
.findFirst()
.orElse(null));
答案 4 :(得分:0)
即使您不知道软件包名称,jarFinder等网站也可能知道它
答案 5 :(得分:-2)
据我所知,这是不可能的。但IDE有很多帮助。在大多数IDE中,使用 Ctrl - Space 列出所有可能性。
这是在NetBeans中。如您所见,它告诉您包装盒中的包装。