获取模块java.base中所有类的类对象
如何以编程方式获取模块获取模块java.base中所有类的类对象,java,class,module,Java,Class,Module,如何以编程方式获取模块java.base中所有类的Class对象?我愿意使用任何外部库。我已经查看了库,但无法获得内置Java库中的类列表,只有类路径上的类。我试图通过迭代文件系统中的所有文件来手动执行此操作,但(据我所知)我无法访问这些类,因为它们位于jar文件中。获取java.base中类的所有Class对象时,代码是什么样子的 谢谢。我能够从src.zip文件中提取所有类: public class TypeUtils { private static Set<Class&l
java.base
中所有类的Class
对象?我愿意使用任何外部库。我已经查看了库,但无法获得内置Java库中的类列表,只有类路径上的类。我试图通过迭代文件系统中的所有文件来手动执行此操作,但(据我所知)我无法访问这些类,因为它们位于jar文件中。获取java.base
中类的所有Class
对象时,代码是什么样子的
谢谢。我能够从src.zip文件中提取所有类:
public class TypeUtils {
private static Set<Class<?>> classes;
private static final Set<String> CONSIDERED_MODULES = Set.of("java.base");
public static void main(String[] args) {
try {
findClasses();
classes.forEach(System.out::println);
}
catch (IOException e) {
e.printStackTrace();
}
}
private static void findClasses() throws IOException {
classes = new HashSet<>();
File root = new File(System.getProperty("java.home"));
File lib = new File(root, "lib");
ZipFile srczip = new ZipFile(new File(lib, "src.zip"));
Iterator<? extends ZipEntry> itr = srczip.entries().asIterator();
while(itr.hasNext())
extractFromEntry(itr.next());
}
private static void extractFromEntry(ZipEntry entry) {
String name = entry.getName();
if(name.endsWith(".java")) {
int firstSlash = name.indexOf('/');
String moduleName = name.substring(0, firstSlash);
if(!CONSIDERED_MODULES.contains(moduleName)) return;
String fullyQualifiedName = name.substring(firstSlash + 1, name.length() - 5).replace('/', '.');
if(fullyQualifiedName.endsWith("-info")) return; //catches module-info or package-info files
try {
Class<?> clazz = Class.forName(fullyQualifiedName);
classes.add(clazz);
}
catch (ClassNotFoundException e) {}
}
}
}
公共类TypeUtils{
私有静态集clazz=Class.forName(fullyQualifiedName);
添加(clazz);
}
catch(classnotfound异常){}
}
}
}
可能是这样的: