这样我就可以在应用程序中找到包名称
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/