没有文件的Java反射

标签 java reflection

这样我就可以在应用程序中找到包名称

Package pack = Item.class.getPackage();

但是我可以在这里或其他地方找到的所有示例,以查找包中的类,都使用文件来加载 jar 并进行研究。我有办法在没有文件的情况下获取 Activity 项目中的类列表吗?

[编辑] 这里还有其他答案,但它们都不适合我

[编辑] 由于某些原因,这已被阻止寻求答案。这是解决方案

    private static Set<Class<? extends Object>> getClassesInPackage(String packagename) {

    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(packagename))));

    Set<Class<?>> classes = reflections.getSubTypesOf(Object.class);
    return classes;  
} 

最佳答案

由于类加载器的动态特性,这是不可能的。类加载器不必公开它们拥有的所有类。 唯一的方法可能是编写自己的类加载器并调整类加载的顺序,这样您的类加载器将拥有更多信息。

但是,here是一个库,可以帮助您获取包中的类(从未使用过它,但现在通过谷歌搜索发现了它)。

类似的东西:

Reflections reflections = new Reflections("my.project.prefix");

Set<Class<? extends Object>> allClasses = 
     reflections.getSubTypesOf(Object.class);

关于没有文件的Java反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37829833/

相关文章:

java - 带有程序代码的静态字段

java - A* 算法在解决 Sliding Tile 难题时执行了很长时间

java - 找不到 lo4j 附加程序

java - JPA - 检索所有实体类

c# - 动态转换和消息类型

java - 我可以覆盖一个隐藏的(但公共(public)的)方法并调用它的 super 方法吗?

java - 如何打开/运行 .jar 文件(双击不起作用)?

java - 在列表中查找字谜

c# - foreach (where x => x.PROPERTY),如何设置PROPERTY?

java - 如何在JAVA中查找方法的返回类型?