gpt4 book ai didi

java - 如何为 jar 中的每个类获取 Class 对象

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

我有一个包含 30 个左右类的 jar 文件。我想要的是,在主要方法的开头,我从这个 jar 中调用一个类,它使用 Java 的反射功能获取对 jar 中每个类的 Class 引用。我的最终目标是执行某种操作,查询为每个类定义的变量。基本上我正在寻找类似的东西。有没有一种简单的方法可以使用标准反射 API 来做到这一点,或者制作一个可行的解决方案会很麻烦?

List l = Reflection.getAllClasses();
String var;
foreach(Class c : l) {
var = c.getField("fieldname");
doSomething(var);
}

编辑:

只是说清楚:代码将从检查的 jar 中执行。

最佳答案

这对我有用:

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;


public class ClassFinder
{
public static void main(String[] args) throws IOException
{
Collection<Class<?>> classes = new ArrayList<Class<?>>();

JarFile jar = new JarFile("/home/nono/yamts/yamts.jar");
for (Enumeration<JarEntry> entries = jar.entries() ; entries.hasMoreElements() ;)
{
JarEntry entry = entries.nextElement();
String file = entry.getName();
if (file.endsWith(".class"))
{
String classname = file.replace('/', '.').substring(0, file.length() - 6);
try
{
Class<?> c = Class.forName(classname);
classes.add(c);
}
catch (Throwable e)
{
System.out.println("WARNING: failed to instantiate " + classname + " from " + file);
}
}
}

for (Class<?> c : classes)
System.out.println(c);
}
}

关于java - 如何为 jar 中的每个类获取 Class 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7820494/

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