java - 我如何只获得带有反射的可实例化类

标签 java reflection reflections

<分区>

我正在使用 reflections package 得到一组实现某个接口(interface)的类。该集合将用作可能的命令行选项列表。我的问题是我只想获得可实例化的类,但现在从以下代码中同时获得可实例化和不可实例化的类(例如抽象类):

Map<String, Class<? extends InterfaceOptimizer>> optimizerList = new HashMap<String, Class<? extends InterfaceOptimizer>>();

Reflections reflections = new Reflections("eva2.optimization.strategies");
Set<Class<? extends InterfaceOptimizer>> optimizers = reflections.getSubTypesOf(InterfaceOptimizer.class);
for(Class<? extends InterfaceOptimizer> optimizer : optimizers) {
    optimizerList.put(optimizer.getName(), optimizer);
}

有没有办法过滤getSubTypesOf返回的集合来过滤掉抽象类?

最佳答案

使用 isInterface() 方法区分类和接口(interface)。

使用 Modifier.isAbstract( getClass().getModifiers() ); 判断类是否是抽象

关于java - 我如何只获得带有反射的可实例化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19249448/

相关文章:

java - 如何动态转换 Java 对象

java - 使用 JRE6 时 GWT servlet 失败

java - 将 Univocity 解析器与 Spring Batch 结合使用

java - 使用 -D 传递参数

c# - 从 property 属性获取数据

android - Java Reflections 不适用于 Android 即时运行

java - JSTL <c :if> tag - Checking whether Java Bean method returns True

C++11 反射库

c# - 如何使用Reflection调用 "private async Task"类型的方法

java - 获取JAVA中动态加载的类的.class文件的路径