Skip to content

Java 反射机制的学习 #12

@itjun

Description

@itjun
  • 判断某个class是否为指定 interface 的实现
    image
/**
 * 获取 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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions