-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
/**
* 获取 EntityImpl 接口的所有实体实现类
*
* @param clazz EntityImpl`接口的实现类
* @return entity类家族
*/
public static Set<Class<? extends EntityImpl>> getFamily(Class<?> clazz) {
var items = new ArrayList<Class<? extends EntityImpl>>(); // 使用通配符泛型
var classz = clazz;
if (classz.getSuperclass().isAnnotationPresent(EntityKey.class))
classz = classz.getSuperclass();
items.add(classz.asSubclass(EntityImpl.class));
for (var item : classz.getDeclaredClasses()) {
if (EntityImpl.class.isAssignableFrom(item))
items.add(item.asSubclass(EntityImpl.class));
}
var result = new HashSet<Class<? extends EntityImpl>>();
for (var item : items) {
if (item.isAnnotationPresent(EntityKey.class))
result.add(item);
}
return result;
}- 获取指定接口的所有子类
- 获取指定父类的所有子类
- 获取某个注解的所有子类
Metadata
Metadata
Assignees
Labels
No labels
