具体的实现我们不去深究,因为深究了其实并没有太大的意义,就好比业务开发一样,我们需要知道的是整个业务,难道业务里面的 所有 基础我们都得需要知道嘛? 是基于 ASM 的实现.
ClassMetadata:对Class的抽象和适配
此接口的所有方法,基本上都跟 Class 有关。
public interface ClassMetadata { // 获取className String getClassName(); // 判断当前 是不是 接口 boolean isInterface(); //判断是否是注解 boolean isAnnotation(); // 判断是否是抽象 boolean isAbstract(); // 是否允许创建 不是接口且不是抽象类 这里就返回true了 default boolean isConcrete() { return !(isInterface() || isAbstract()); } // 判断 当前类是否 是 final boolean isFinal(); // 是否是独立的(能够创建对象的) 比如是Class、或者内部类、静态内部类 boolean isIndependent(); // 如果当前类是内部类则返回 true default boolean hasEnclosingClass() { return (getEnclosingClassName() != null); } // 如果当前类为内部类,则获取外部类的全限定类名 @Nullable String getEnclosingClassName(); // 基本都是true,只有当类型是 Object的时候才是false.. 也就是说 Object 不存在父类 default boolean hasSuperClass() { return (getSuperClassName() != null); } // 获取父类的ClassName @Nullable String getSuperClassName(); // 会把实现的所有接口名称都返回 String[] getInterfaceNames(); // 返回类中定义的公共、私有、保护的内部类 String[] getMemberClassNames(); }