/**
* 获取接口的所有实现类 理论上也可以用来获取类的所有子类
* 查询路径有限制,只局限于接口所在模块下,比如pandora-gateway,而非整个pandora(会递归搜索该文件夹下所以的实现类)
* 路径中不可含中文,否则会异常。若要支持中文路径,需对该模块代码中url.getPath() 返回值进行urldecode.
* Created by wangzhen3 on 2017/6/23.
*/
public class demo {
// private static final Logger LOG = LoggerFactory.getLogger(ClassUtil.class);
public static ArrayList<Class> getAllClassByInterface(Class clazz) {
ArrayList<Class> list = new ArrayList<>();
// 判断是否是一个接口
if (clazz.isInterface()) {
try {
ArrayList<Class> allClass = getAllClass(clazz.getPackage().getName());
/**
* 循环判断路径下的所有类是否实现了指定的接口 并且排除接口类自己
*/
for (int i = 0; i < allClass.size(); i++) {
/**
* 判断是不是同一个接口
*/
// isAssignableFrom:判定此 Class 对象所表示的类或接口与指定的 Class
// 参数所表示的类或接口是否相同,或是否是其超类或超接口
if (clazz.isAssignableFrom(allClass.get(i))) {
// 自身并不加进去
if (!clazz.equals(allClass.get(i))) {
list.add(allClass.get(i));
}
}
}
} catch (Exception e) {
// LOG.error("出现异常{}",e.getMessage());
throw new RuntimeException
获取接口的所有实现类
最新推荐文章于 2023-08-10 16:55:27 发布