没有文件的Java反射

时间:2016-06-15 08:20:03

标签: java reflection

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

Package pack = Item.class.getPackage();

但是我在这里或其他地方找到的所有示例都可以在程序包中找到类来加载jar并查看它。我有办法在没有文件的情况下在活动项目中获取类列表吗?

[编辑] 这里有其他答案,但他们都没有为我工作

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

    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;  
} 

1 个答案:

答案 0 :(得分:1)

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

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

有些东西:

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

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