工作中需要用到一个支持变量替换和自定义函数的模板表达式,发现现有的开源项目不能满足,于是自己造了个轮子。

该模板表达式核心就三个文件:

ExpressionNode.java -- 表达式节点

public class ExpressionNode {
    /** 模板 **/
    public static final Integer TEMPLATE = 0;
    /** 函数 **/
    public static final Integer FUNCTION = 1;
    /** 变量 **/
    public static final Integer VARIABLE = 2;
    /** 常量 **/
    public static final Integer CONSTANT = 3;
    /** 类型 **/
    private Integer nodeType;
    /** 表达式 **/
    private String expression;
    /** 值 **/
    private Object value;
    /** 参数 **/
    private List<ExpressionNode> arguments;
    /** 变量值类型 **/
    private Integer varType;
    /** 默认值 **/
    private String defVal;

    public Integer getNodeType() {
        return nodeType;
    }

    public void setNodeType(Integer nodeType) {
        this.nodeType = nodeType;
    }

    public String getExpression() {
        return expression;
    }

    public void setExpression(String expression) {
        this.expression = expression;
    }

    public Object getValue() {
        return value;
    }

    public void setValue(Object value) {
        this.value = value;
    }

    public List<ExpressionNode> getArguments() {
        return arguments;
    }

    public void setArguments(List<ExpressionNode> arguments) {
        this.arguments = arguments;
    }

    public Integer getVarType() {
        return varType;
    }

    public void setVarType(Integer varType) {
        this.varType = varType;
    }

    public String getDefVal() {
        return defVal;
    }

    public void setDefVal(String defVal) {
        this.defVal = defVal;
    }

    public void addArgument(ExpressionNode argument) {
        if (argument == null) {
            return;
        }
        if (arguments == null) {
            arguments = new ArrayList<ExpressionNode>();
        }
        arguments.add(argument);
    }

    public List<Object> getArgumentValues() {
        List<Object> values = new ArrayList<Object>();
        if (arguments != null) {
            arguments.forEach(arg -> {
                values.add(arg.getValue());
            });
        }
        return values;
    }

    @Override
    public String toString() {
        return "ExpressionNode [nodeType=" + nodeType + ", expression=" + expression + ", value=" + value
                + ", arguments=" + arguments + ", varType=" + varType + ", defVal=" + defVal + "]";
    }

}
View Code

相关文章:

  • 2021-11-04
  • 2022-12-23
  • 2022-12-23
  • 2022-01-06
  • 2021-07-31
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-05
  • 2021-08-11
  • 2022-12-23
  • 2022-12-23
  • 2021-06-18
  • 2021-08-30
相关资源
相似解决方案