目录

普通 java 语法

语法支持

序号符号备注
1+,-,*,/,<,>,<=,>=,==,!=,<>,%,++,–<>等同于!=, mod等同于%
2in,like,&&,`
3for,break,continue,if then else

例子

  • 循环
/**
 * 循环操作符测试
 * @throws Exception if any
 */
@Test
public void operateLoopTest() throws Exception {
    final String express = "int n=10;" +
            "int sum=0;int i = 0;" +
            "for(i=0;i<n;i++){" +
            "sum=sum+i;" +
            "}" +
            "return sum;";
    ExpressRunner runner = new ExpressRunner();
    DefaultContext<String, Object> context = new DefaultContext<>();
    Object r = runner.execute(express, context, null, true, false);
    Assert.assertEquals(45, r);
}
  • 逻辑三元操作

注意:这个没有测试成功

/**
 * 三目运算符测试
 * 备注:测试不通过
 * @throws Exception if any
 */
@Test
public void logicalTernaryOperationsTest() throws Exception {
    final String express =
            "a=1;b=2;max = a>b?a:b;";
    ExpressRunner runner = new ExpressRunner();
    DefaultContext<String, Object> context = new DefaultContext<>();
    Object r = runner.execute(express, context, null, true, false);
    Assert.assertEquals(2, r);
}

Java 对象操作

Tips

QLExpress 自动会

import java.lang.*;
import java.util.*;

测试案例

  • User.java
package com.github.houbb.tech.validation.qlexpress;

import org.apache.commons.lang.StringUtils;

/**
 * 备注:例子来自官方例子
 * @author houbinbin
 */
public class User {

    /**
     * 标识
     */
    private long id;

    /**
     * 名称
     */
    private String name;

    /**
     * 年龄
     */
    private int age;

    public User(long id){
        this.id = id;
    }

    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

    /**
     * 首字母大写
     * @param value 字符串
     * @return 转换后的信息
     */
    public static String firstToUpper(String value){
        if(StringUtils.isBlank(value))
            return "";
        value = StringUtils.trim(value);
        String f = StringUtils.substring(value,0,1);
        String s = "";
        if(value.length() > 1){
            s = StringUtils.substring(value,1);
        }
        return f.toUpperCase() + s;
    }
}
  • ObjectTest.java
/*
 * Copyright (c)  2018. houbinbin Inc.
 * tech-validation All rights reserved.
 */

package com.github.houbb.tech.validation.qlexpress;

import com.ql.util.express.DefaultContext;
import com.ql.util.express.ExpressRunner;
import com.ql.util.express.IExpressContext;

import org.junit.Assert;
import org.junit.Test;

/**
 * <p> 对象测试 </p>
 *
 * 备注:例子来自官方例子
 *
 * <pre> Created: 2018/6/6 下午6:09  </pre>
 * <pre> Project: tech-validation  </pre>
 *
 * @author houbinbin
 * @version 1.0
 * @since JDK 1.7
 */
public class ObjectTest {

    @Test
    public void test1() throws Exception {
        String exp = "import com.github.houbb.tech.validation.qlexpress.User;" +
                "User cust = new User(1);" +
                "cust.setName(\"小强\");" +
                "return cust.getName();";
        ExpressRunner runner = new ExpressRunner();
        String r = (String) runner.execute(exp, null, null, false, false);
        Assert.assertEquals("操作符执行错误", "小强", r);
    }

    @Test
    public void test2() throws Exception {
        String exp = "cust.setName(\"小强\");" +
                "return cust.getName();";
        IExpressContext<String, Object> expressContext = new DefaultContext<>();
        expressContext.put("cust", new User(1));
        ExpressRunner runner = new ExpressRunner();
        String r = (String) runner.execute(exp, expressContext, null, false, false);
        Assert.assertEquals("操作符执行错误", "小强", r);
    }

    @Test
    public void test3() throws Exception {
        String exp = "首字母大写(\"abcd\")";
        ExpressRunner runner = new ExpressRunner();
        runner.addFunctionOfClassMethod("首字母大写", User.class.getName(), "firstToUpper", new String[]{"String"}, null);
        String r = (String) runner.execute(exp, null, null, false, false);
        Assert.assertEquals("操作符执行错误", "Abcd", r);
    }

    /**
     * 使用别名
     *
     * @throws Exception if any
     */
    @Test
    public void testAlias() throws Exception {
        String exp = "cust.setName(\"小强\");" +
                "定义别名 custName cust.name;" +
                "return custName;";
        IExpressContext<String, Object> expressContext = new DefaultContext<>();
        expressContext.put("cust", new User(1));
        ExpressRunner runner = new ExpressRunner();
        //
        runner.addOperatorWithAlias("定义别名", "alias", null);
        //执行表达式,并将结果赋给r
        String r = (String) runner.execute(exp, expressContext, null, false, false);
        Assert.assertEquals("操作符执行错误", "小强", r);
    }

    /**
     * 使用宏
     *
     * @throws Exception if any
     */
    @Test
    public void testMacro() throws Exception {
        String exp = "cust.setName(\"小强\");" +
                "定义宏 custName {cust.name};" +
                "return custName;";
        IExpressContext<String, Object> expressContext = new DefaultContext<>();
        expressContext.put("cust", new User(1));
        ExpressRunner runner = new ExpressRunner();
        runner.addOperatorWithAlias("定义宏", "macro", null);
        String r = (String) runner.execute(exp, expressContext, null, false, false);
        Assert.assertEquals("操作符执行错误", "小强", r);
    }

}

导航

QLExpress 系列导航

Logo

Authing 是一款以开发者为中心的全场景身份云产品,集成了所有主流身份认证协议,为企业和开发者提供完善安全的用户认证和访问管理服务

更多推荐