# eggg **Repository Path**: asgc/eggg ## Basic Information - **Project Name**: eggg - **Description**: 一个 Java 泛型分析工具(泛型蛋) - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-10-22 - **Last Updated**: 2025-10-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

EggG

一个 Java 泛型分析工具(泛型蛋)

Ask DeepWiki Maven Apache 2 jdk-8 jdk-11 jdk-17 jdk-21 jdk-25
gitee star github star


##### 语言: 中文 | [English](README.md)
### 关于 gegg 是一个 Java 泛型分析的小工具(大概 30k 左右)。分析会涉及:类型、类、构造器、方法、字段、属性、参数,扩展传导等细节。适合一些:涉及泛型的框架性项目采用。 ### 示例1 ```java public class EgggDemo { //一般,应用内全局单例 private static Eggg eggg = new Eggg(); @Test public void case1() { TypeWrap typeWrap = eggg.getTypeWrap(new HashMap() {}.getClass()); if (typeWrap.isMap()) { if (typeWrap.isParameterizedType()) { //已经分析过的 Type keyType = typeWrap.getActualTypeArguments()[0]; Type ValueType = typeWrap.getActualTypeArguments()[1]; assert keyType.equals(Integer.class); assert ValueType.equals(UserModel.class); return; } } assert false; } } ``` ### 示例2 (for snack4) 这个示例需要根据 "注解" 生成提炼物、别名,以及指定构造器。需要添加定制内容。 ```java package org.noear.snack4.codec.util; import org.noear.eggg.*; import org.noear.snack4.annotation.ONodeAttrHolder; import org.noear.snack4.annotation.ONodeAttr; import org.noear.snack4.annotation.ONodeCreator; import java.lang.reflect.*; public class EgggUtil { //一般,应用内全局单例 private static final Eggg eggg = new Eggg() .withCreatorClass(ONodeCreator.class) .withDigestHandler(EgggUtil::doDigestHandle) .withAliasHandler(EgggUtil::doAliasHandle); private static String doAliasHandle(ClassWrap cw, Object h, Object digest) { if (digest instanceof ONodeAttrHolder) { return ((ONodeAttrHolder) digest).getAlias(); } else { return null; } } private static ONodeAttrHolder doDigestHandle(ClassWrap cw, Object h, AnnotatedElement e, ONodeAttrHolder ref) { ONodeAttr attr = e.getAnnotation(ONodeAttr.class); if (attr == null && ref != null) { return ref; } if (h instanceof FieldWrap) { return new ONodeAttrHolder(attr, ((Field) e).getName()); } else if (h instanceof PropertyMethodWrap) { return new ONodeAttrHolder(attr, Property.resolvePropertyName(((Method) e).getName())); } else if (h instanceof ParamWrap) { return new ONodeAttrHolder(attr, ((Parameter) e).getName()); } else { return null; } } /** * 获取类型包装器 */ public static TypeWrap getTypeWrap(Type type) { return eggg.getTypeWrap(type); } } ``` ```java public class Demo { public void case1(){ ypeWrap typeWrap = EgggUtil.getTypeWrap(clazz); for (FieldWrap fw : typeWrap.getClassWrap().getFieldWraps()) { if (fw.isStatic()) { continue; } //已经分析过的泛型 fw.getTypeWrap(); } } } ```