| 接口 | 说明 |
|---|---|
| FastFieldGetter.Proxy |
代理接口
|
| 类 | 说明 |
|---|---|
| Arith |
Arithmetic
1:支持 byte short int long float double BigInteger 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 BigInteger BigDecimal 的 == !
|
| Const |
STR INT LONG FLOAT DOUBLE TRUE FALSE NULL
|
| Expr |
Expr
|
| ExprList |
ExprList
|
| FastFieldGetter |
使用 jfinal proxy 机制消除 java.lang.reflect.Method.invoke(...)
|
| Field |
Field
field 表达式取值优先次序,以 user.name 为例
1:假如 user.getName() 存在,则优先调用
2:假如 user 具有 public name 属性,则取 user.name 属性值
3:假如 user 为 Model 子类,则调用 user.get("name")
4:假如 user 为 Record,则调用 user.get("name")
5:假如 user 为 Map,则调用 user.get("name")
|
| FieldGetter |
FieldGetter 用于支持 target.field 表达式的取值,
以及支持用户扩展自定义的 FieldGetter 实现方式
|
| FieldGetters |
FieldGetters 封装官方默认 FieldGetter 实现
|
| FieldGetters.ArrayLengthGetter |
ArrayLengthGetter
获取数组长度: array.length
|
| FieldGetters.GetterMethodFieldGetter |
GetterMethodFieldGetter
使用 getter 方法获取 target.field 表达式的值
|
| FieldGetters.IsMethodFieldGetter |
IsMethodFieldGetter
使用 target.isXxx() 方法获取值,默认不启用该功能,用户可以通过如下方式启用:
Engine.addLastFieldGetter(new FieldGetters.IsMethodFieldGetter());
|
| FieldGetters.MapFieldGetter |
MapFieldGetter
使用 Map.get(Object) 获取值
|
| FieldGetters.NullFieldGetter |
NullFieldGetter
用于消除 FieldKit.getFieldGetter(...)
|
| FieldGetters.RealFieldGetter |
RealFieldGetter
使用 target.field 获取值
|
| FieldKeyBuilder |
FieldKeyBuilder
用于生成缓存 FieldGetter 的 key
|
| FieldKeyBuilder.FastFieldKeyBuilder |
FastFieldKeyBuilder
|
| FieldKeyBuilder.FieldKey |
FieldKey
FieldKey 用于封装 targetClass、fieldName 这两部分的 hash 值,
确保不会出现 key 值碰撞
这两部分 hash 值在不同 class 与 field 的组合下出现碰撞的
概率完全可以忽略不计
备忘:
可以考虑用 ThreadLocal 重用 FieldKey 对象,但要注意放入 Map fieldGetterCache
中的 FieldKey 对象需要 clone 出来,确保线程安全。
|
| FieldKeyBuilder.StrictFieldKeyBuilder |
StrictFieldKeyBuilder
|
| FieldKit |
FieldKit
|
| ForCtrl |
forCtrl : ID : expression
| exprList?
|
| Id |
Id
|
| IncDec |
自增与自减
|
| Index |
index : expr '[' expr ']'
支持 a[i]、 a[b[i]]、a[i][j]、a[i][j]...
|
| 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(...)
|
| Method |
Method : expr '.'
|
| 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
|
| NullMethodInfo |
NullMethodInfo
1:MethodKit.getMethod(...)
|
| NullSafe |
NullSafe
在原则上只支持具有动态特征的用法,例如:方法调用、字段取值、Map 与 List 取值
而不支持具有静态特征的用法,例如:static method 调用、shared method 调用
用法:
#( seoTitle ??
|
| RangeArray |
RangeArray : [expr .. expr]
用法:
1:[1..3]
2:[3..1]
|
| RangeArray.RangeList | |
| SharedMethod |
SharedMethod
用法:
engine.addSharedMethod(new StrKit());
engine.addSharedStaticMethod(MyKit.class);
#if (notBlank(para))
....
|
| SharedMethodKit |
SharedMethodKit
|
| StaticField |
StaticField : ID_list '::' ID
动态获取静态变量值,变量值改变时仍可正确获取
用法:com.jfinal.core.Const::JFINAL_VERSION
|
| StaticMethod |
StaticMethod : ID_list : '::' ID '(' exprList?
|
| Ternary |
Ternary
|
| Unary |
unary : ('!'
|
Copyright © 2024. All rights reserved.