gpt4 book ai didi

java - 在 Jar 中查找实现接口(interface)的类

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:38:47 26 4
gpt4 key购买 nike

我想查找jar 中的类是否实现了特定的接口(interface)。我已经实现了下面的代码,但是它遍历了 jar 文件中的所有类,并在每个类上查找它是否实现了这个特定的接口(interface)。

    public static synchronized boolean findClassesInJar(final Class<?> baseInterface, final String jarName){
final List<String> classesTobeReturned = new ArrayList<String>();
if (!StringUtils.isBlank(jarName)) {
//jarName is relative location of jar wrt.
final String jarFullPath = File.separator + jarName;
final ClassLoader classLoader = this.getClassLoader();
JarInputStream jarFile = null;
URLClassLoader ucl = null;
final URL url = new URL("jar:file:" + jarFullPath + "!/");
ucl = new URLClassLoader(new URL[] { url }, classLoader);
jarFile = new JarInputStream(new FileInputStream(jarFullPath));
JarEntry jarEntry;
while (true) {
jarEntry = jarFile.getNextJarEntry();
if (jarEntry == null)
break;
if (jarEntry.getName().endsWith(".class")) {
String classname = jarEntry.getName().replaceAll("/", "\\.");
classname = classname.substring(0, classname.length() - 6);
if (!classname.contains("$")) {
try {
final Class<?> myLoadedClass = Class.forName(classname, true, ucl);
if (baseInterface.isAssignableFrom(myLoadedClass)) {
return true;
}
} catch (final ClassNotFoundException e) {

}
}
}
}
return false;
}

有什么简单的方法可以做到这一点吗?因为如果有一个包含100个类文件的jar,第100个类实现了这个接口(interface),通过上面的代码我需要遍历所有的100个类文件,看看它是否实现了这个接口(interface)。有什么有效的方法吗?

最佳答案

Reflections图书馆可以做到这一点:

Reflections reflections = new Reflections(
ClasspathHelper.forPackage("your.root.package"), new SubTypesScanner());
Set<Class<? extends YourInterface>> implementingTypes =
reflections.getSubTypesOf(YourInterface.class);

关于java - 在 Jar 中查找实现接口(interface)的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16546418/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com