ADT4J:一种Java代数类型开发库

761 阅读1分钟
原文链接: github.com

ADT4J实现了Algebraic Data Types,支持@GenerateValueClassForVisitor注解。ADT4J为每一个@GenerateValueClassForVisitor 注解构造一个新的类,允许你简单定义一个常用数据类型。

定义数据类型示例:

    // Define Expression data type
    @GenerateValueClassForVisitor
    @Visitor(resultVariableName="R", selfReferenceVariableName="E")
    interface ExpressionVisitor {
        @GeneratePredicate(name = "isLiteral");
        R lit(int i);

        R sum(@Getter(name = "leftOperand") E e1, @Getter(name = "rightOperand") E e2);
        R mul(@Getter(name = "leftOperand") E e1, @Getter(name = "rightOperand") E e2);
    }

功能特性

  • 支持递归数据类型
  • 生成的hashCode、equals和toString实现值语义
  • 额外的注解生成 predicates、getters和“updaters”
  • 完全定制化的API:为生成的方法定制名称和访问级别
  • 尽可能在编译和类型检查时进行Comparable实现
  • 尽可能在编译和类型检查时实现类的序列化
  • 敏感的错误信息
  • 通过标准的Java扩展支持生成类继承
  • 执行快速

安装配置

通过maven依赖使用ADT4J。

    
        com.github.sviperll
        adt4j
        3.0.2
    

你可以使用adt4j-shaded手工简化依赖来避免依赖冲突。adt4j-shaded没有依赖并且也不会破坏类途径。所有Java包都由adt4j-shaded提供,并且根目录在com.github.sviperll.adt4j。

开发资源

官方网站:github.com/sviperll/ad…
开源地址:github.com/sviperll/ad…