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

Lor*_*ias 7 java reflection jar introspection

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

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

编辑:

只是为了说清楚:代码将通过检查jar来执行.

dag*_*ies 7

这对我有用:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)