猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
是否可以使用反射找到包中的所有类?
是否可以使用反射找到包中的所有类?
是否有可能在给定的包中找到所有的类或接口?(快速查看。
Package
,这似乎是不可能的。)
侃侃尔雅
浏览 804
回答 4
4回答
拉风的咖菲猫
由于类加载器的动态特性,这是不可能的。类加载器不需要告诉VM它可以提供哪些类,相反,它们只是被传递给类的请求,并且必须返回类或抛出异常。但是,如果编写自己的类加载器,或者检查类路径和JAR,就可以找到这些信息。这将通过文件系统操作,而不是反射。甚至可能有一些库可以帮助您这样做。如果存在生成或远程传递的类,则无法发现这些类。通常的方法是在某个地方注册您需要在文件中访问的类,或者在另一个类中引用它们。或者只是在命名时使用约定。增编:反思图书馆将允许您在当前类路径中查找类。它可以用于获取包中的所有类: Reflections reflections = new Reflections("my.project.prefix"); Set<Class<? extends Object>> allClasses = reflections.getSubTypesOf(Object.class);
0
0
0
长风秋雁
您可能应该看看开放源码。反射库..有了它,你可以很容易地实现你想要的。首先,设置反射索引(因为默认情况下禁用了对所有类的搜索,这有点麻烦):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.your.package"))));然后可以查询给定包中的所有对象:Set<Class<?>> classes = reflections.getSubTypesOf(Object.class);
0
0
0
开满天机
GoogleGuava 14包括一个新的类ClassPath使用三种方法扫描顶级类:getTopLevelClasses()getTopLevelClasses(String packageName)getTopLevelClassesRecursive(String packageName)见ClassPathjavadocs想了解更多信息。
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
Java
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续