• java 获取包下的类 find all classes in a package


    群里有个人问的,java下怎么获取指定包下的类。例如获取java.lang包下都包含什么类。

    classloader

    java的classloader为双亲委派模式。但是只能获取到用户编写的类,并不能获取到诸如java.lang等系统包下的类。在java中,java.lang等包是由bootstrap classloader去负责加载。
    Bootstrap ClassLoader称为启动加载器,是Java类中加载层次最顶层的类加载器,负责加载JDK中的核心类库,如rt.jar,resources.jar,charsets.jar等。bootstrap classloader由c++编写,在java中是无法访问的。既然无法访问,我们就无法通过反射等方法去获取系统核心包下包含的类。

    访问jar包

    通过classloader获取加载的package,然后通过Reflection扫描包中的类即可

    代码如下

            List<ClassLoader> classLoadersList = new LinkedList<ClassLoader>();
            classLoadersList.add(ClasspathHelper.contextClassLoader());
            classLoadersList.add(ClasspathHelper.staticClassLoader());
    
            Reflections reflections = new Reflections(new ConfigurationBuilder()
                    .setScanners(new SubTypesScanner(false /* don't exclude Object.class */), new ResourcesScanner())
                    .setUrls(ClasspathHelper.forClassLoader(classLoadersList.toArray(new ClassLoader[0])))
                    .filterInputsBy(new FilterBuilder().include(FilterBuilder.prefix("org.example"))));
            Set<Class<? extends Object>> allClasses =
                    reflections.getSubTypesOf(Object.class);
            allClasses.stream().forEach(System.out::println);
    

    这种方法可以获取java.lang下包含的类,截图

  • 相关阅读:
    oracle函数 TO_DATE(X[,c2[,c3]])
    oracle函数 TO_CHAR(x[[,c2],C3])
    oracle函数 RAWTOHEX(c1)
    oracle HEXTORAW(c1)
    oracle函数 CONVERT(c1,set1,set2)
    oracle函数 ROWIDTOCHAR(rowid)
    oracle函数 chartorowid(c1)
    创建可按比例调整的布局的 Windows 窗体
    A Byte of Python(简明Python教程) for Python 3.0 下载
    使用异步事件在后台进行计算并报告进度
  • 原文地址:https://www.cnblogs.com/potatsoSec/p/13151141.html
Copyright © 2020-2023  润新知