FakeEnum

为什么要有FakeEnum

项目中有许多地方使用到了策略模式和枚举来实现方法分发和解耦,例如条件系统,目标系统。

项目中也有很多地方公共枚举,因为枚举会在一个公共模块中,所以会各种不同的模块使用公共枚举时修改同一个文件,对开发造成不便。

通过直接继承来达到效果

FakeEnum : 通过直接继承来实现

/**
* fakeEnum 标记接口
*  解析的时候 会直接读取该类的public static 字段
*   约定返回值 必须和当时定义的类一致
*
 */
public abstract class FakeEnum implements EnumValue {

    int value;
    private String name;
    // skip ConfigCheck
    private transient FakeEnums.Value fakeEnumValue;

    /**
    * id < 0 的时候 不计入byId缓存,无法通过ID获取
    *
    */
    protected FakeEnum(int value) {
        this.value = value;
    }

    /**
    * 获取假枚举注册时候的信息
    *
    */
    private FakeEnums.Value getFakeEnumValue() {
        return fakeEnumValue;
    }

    @Override
    public final int value() {
        if(value <0) {
            throw new UnsupportedOperationException(String.fotmat("FakeEnum:[%s] value 未初始化", getClass().getName()));
        }
    }



}


通过注解来达到效果

@FakeEnumReg: 通过枚举来实现

@Target({ElementType.Type})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Lazy
public @interface FakeEnumReg{

    /*
    *   只注册 标记类中的常量值为这个的字段
    *   @return 需要注册到的类型
    */
    Class<? extends FakeEnum> value();

}



@SupportedAnnotationTypes("com.windfore.common.untility.fakeenum.FakeEnumReg")
public class FakeEnumProcessor extends AbstractProcessor {
    public static final 


}

项目模块

account

activevip

activity

ai