Class | Description |
---|---|
Arith |
Arithmetic
1:支持 byte short int long float double BigDecimal 的 + - * / % 运算
2:支持字符串加法运算
|
Array |
Array
用法:
1:[1, 2, 3]
2:["a", 1, "b", 2, false, 3.14]
|
Array.ArrayListExt |
支持 array.length 表达式
|
Assign |
Assign
支持三种赋值,其中第二种如果括号中是 ID 或 STR 则演变为第三种是对 map 赋值:
1:ID = expr
2:ID [ expr ] = expr
如果 expr 为 int 或 long 型,则是对 array 赋值
如果 expr 为 ID、STR 型,则是对 map 进行赋值
否则抛异常出来
3:ID [ ID ] = expr 或者 ID [ STR ] = expr
4:支持无限连:id = array[ i = 0 ] = array[1] = 123
|
Compare |
Compare
1:支持 byte short int long float double BigDecimal 的 == != > >= < <= 操作
2:== != 作用于 string,调用其 equals 方法进行比较
3:> >= < <= 可以比较实现了 Comparable 接口的对象
注意:float double 浮点型数据在比较操作时,具有精度上的局限性,不建议对浮点数进行比较
|
Const |
STR INT LONG FLOAT DOUBLE TRUE FALSE NULL
|
Expr |
Expr
|
ExprList |
ExprList
|
Field |
Field
field 表达式取值优先次序,以 user.name 为例
1:假如 user.getName() 存在,则优先调用
2:假如 user 为 Model 子类,则调用 user.get("name")
3:假如 user 为 Record,则调用 user.get("name")
4:假如 user 为 Map,则调用 user.get("name")
5:假如 user 具有 public name 属性,则取 user.name 属性值
|
FieldKit |
FieldKit
|
ForCtrl |
forCtrl : ID : expression
| exprList? ';' expr? ';' exprList?
两种用法
1:#for(id : list) #end
#for(entry : map) #end
2:#for(init; cond; update) #end
|
Id |
Id
|
IncDec |
自增与自减
|
Index |
index : expr '[' expr ']'
支持 a[i]、 a[b[i]]、a[i][j]、a[i][j]...[n]
|
Logic |
Logic
支持逻辑运算: ! && ||
|
Map |
Map
1:定义 map 常量
{k1:123, k2:"abc", 'k3':true, "k4":[1,2,3], k5:1+2, 1:12, true:"Y", null:"abc"}
如上所示,map定义的 key 可以为 id 标识符或者 String、Integer、Long、Boolean、null
等常量值 (详见 ExprParser.buildMapEntry(...) 方法),
右侧的 value 可以是任意的常量与表达式
2:取值
先将 Map 常量赋值给某个变量: #set(map = {...})
map['k1']
map["k1"]
map[expr]
map.get("k1")
map.k1
3:不通过中间变量取值
{1:'自买', 2:'跟买'}.get(1)
{1:'自买', 2:'跟买'}[2]
如上所示,当以下标方式取值时,下标参数可以是 string 与 expr,而 expr 求值以后的值必须也为 string类型
当用 map.k1 这类 field 字段取值形式时,则是使用 id 标识符,而不是 string 形参数
注意:即便是定义的时候 key 用的是 id 标识符,但在取值时也要用 string 类型下标参数或 expr 求值后为 string
定义时 key 可以使用 id 标识符是为了书写方便,本质上仍然是 string
3:可创建空 map,如: #(map = {})
|
Method |
Method : expr '.' ID '(' exprList? ')'
|
MethodInfo |
MethodInfo
|
MethodInfoExt |
MethodInfoExt 辅助实现 extension method 功能
|
MethodKeyBuilder |
MethodKeyBuilder
|
MethodKeyBuilder.FastMethodKeyBuilder |
FastMethodKeyBuilder
targetClass、methodName、argTypes 的 hash 直接使用 String.hashCode()
String.hashCode() 会被缓存,性能更好
|
MethodKeyBuilder.StrictMethodKeyBuilder |
StrictMethodKeyBuilder
targetClass、methodName、argTypes 三部分全部使用 fnv1a64 算法计算 hash
|
MethodKit |
MethodKit
|
NullExpr |
NullExpr
|
NullSafe |
NullSafe
在原则上只支持具有动态特征的用法,例如:方法调用、字段取值、Map 与 List 取值
而不支持具有静态特征的用法,例如:static method 调用、shared method 调用
用法:
#( seoTitle ?? "JFinal 极速开发社区" )
支持级联: #( a.b.c ?? "JFinal 极速开发社区" )
支持嵌套: #( a ?? b ?? c ?? d)
|
RangeArray |
RangeArray : [expr ..
|
RangeArray.RangeList | |
SharedMethod |
SharedMethod
用法:
engine.addSharedMethod(object);
engine.addSharedStaticMethod(Xxx.class);
#(method(para))
|
SharedMethodKit |
SharedMethodKit
|
StaticField |
StaticField : ID_list '::' ID
动态获取静态变量值,变量值改变时仍可正确获取
用法:com.jfinal.core.Const::JFINAL_VERSION
|
StaticMethod |
StaticMethod : ID_list : '::' ID '(' exprList? ')'
用法: com.jfinal.kit.Str::isBlank("abc")
|
Ternary |
Ternary
|
Unary |
unary : ('!' | '+' | '-'| '++' | '--') expr
只支持 +expr 与 -expr
!expr、 ++expr、 --expr 分别由 Logic、IncDec 支持
|
Copyright © 2018. All rights reserved.