Skip to content

🧩 MetaObject ​

Java Translator 抽象基类

类元数据的抽象基类,定义统一的元信息数据结构与 getter 契约,供反射/ASM/dexlib 三种来源适配。

📁 源码:ClassySharkWS/src/com/google/classyshark/silverghost/translator/java/MetaObject.java   📦 包:com.google.classyshark.silverghost.translator.java

职责 ​

MetaObject 是 Java Translator 子系统的统一类型系统入口。它声明了一套内部数据类(接口、字段、构造器、方法、注解、参数、异常)和一组抽象 getter,把"一个类的元信息"抽象成稳定契约。三个子类(MetaObjectClass 反射、MetaObjectAsmClass ASM、MetaObjectDex dexlib)分别适配三种来源,但对外都呈现为 MetaObject,使 JavaTranslator 无需关心来源差异。它是纯数据持有者,不含业务逻辑。

关键方法 / 字段 ​

名称类型说明
InterfaceInfo内部类接口元数据:interfaceStr、genericsStr(默认空)
FieldInfo内部类字段元数据,implements Comparable(按 name 排序)
ConstructorInfo内部类构造器元数据:注解、参数、修饰符
MethodInfo内部类方法元数据,implements Comparable(按 name 排序)
AnnotationInfo内部类注解元数据:annotationStr
ParameterInfo内部类参数元数据:parameterStr、genericStr
ExceptionInfo内部类异常元数据:exceptionStr
getName()abstract String类全限定名
getModifiers()abstract int修饰符(java.lang.reflect.Modifier 编码)
getSuperclass() / getSuperclassGenerics()abstract String超类名与其泛型串
getInterfaces()abstract InterfaceInfo[]实现的接口列表
getDeclaredFields()abstract FieldInfo[]声明的字段
getDeclaredConstructors()abstract ConstructorInfo[]声明的构造器
getDeclaredMethods()abstract MethodInfo[]声明的方法
getClassGenerics(String)abstract String类自身的泛型参数串

工作流程 ​

mermaid
flowchart TD
    A["JavaTranslator"] --> B["MetaObjectFactory.buildMetaObject"]
    B --> C["按存档类型选子类<br/>MetaObjectClass / MetaObjectAsmClass / MetaObjectDex"]
    C --> D["子类填充内部数据类<br/>(FieldInfo / MethodInfo / ...)"]
    D --> E["JavaTranslator 经抽象 getter 读取元数据"]

设计要点 ​

  • 统一类型系统 — 所有元信息以 MetaObject.XxxInfo 数据类表达,子类只负责把来源特定的表示转译成这些数据类,JavaTranslator 完全面向抽象编程。
  • Comparable 启用排序 — FieldInfo 与 MethodInfo 实现 Comparable,compareTo 按 name 字段比较,让 JavaTranslator 可直接 Collections.sort 出字母序存根。
  • 泛型字段默认空串 — genericsStr/genericReturnType 默认 "",只有反射子类会填充,ASM/dex 变体保留空串,呈现层无需判空。
  • 纯数据持有者 — 抽象类本身无状态、无逻辑,仅定义契约与数据结构,符合 Template Method 的数据载体变体。

协作关系 ​

  • 被 [[JavaTranslator]] 依赖(核心元数据来源)
  • 被 [[MetaObjectWithMapper]] 装饰(继承并包装)
  • 子类 → [[MetaObjectClass]]、[[MetaObjectAsmClass]]、[[MetaObjectDex]]
  • 被 [[MetaObjectFactory]] 实例化

已知问题 / TODO ​

  • 无明显已知问题;作为抽象数据契约职责清晰。

相关文档 ​

最后更新:

基于 Apache 2.0 协议发布