深入理解OGNL - 附录详析
最编程
2024-02-09 20:10:37
...
参考:http://commons.apache.org/proper/commons-ognl/language-guide.html
操作符
Operator |
getValue() Notes |
setValue() Notes |
---|---|---|
e1 , e2 Sequence operator |
Both e1 and e2 are evaluated with the same source object, and the result of e2 is returned. |
getValue is called on e1 , and then setValue is called on e2 . |
e1 = e2 Assignment operator |
getValue is called on e2 , and then setValue is called on e1 with the result of e2 as the target object. |
Cannot be the top-level expression for setValue . |
e1 ? e2 : e3 Conditional operator |
getValue is called on e1 and the result is interpreted as a boolean. getValue is then called on either e2 or e3 , depending on whether the result of e1 was true or false respectively, and the result is returned. |
getValue is called on e1 , and then setValue is called on either e2 or e3 . |
e1 || e2 , e1 or e2 Logical or operator |
getValue is called on e1 and the result is interpreted as a boolean. If true , that result is returned; if false , getValue is called on e2 and its value is returned. |
getValue is called on e1 ; if false , setValue is called on e2 . Note that e1 being true prevents any further setting from taking place. |
e1 && e2 , e1 and e2 Logical and operator |
getValue is called on e1 and the result is interpreted as a boolean. If false , that result is returned; if true, getValue is called on e2 and its value is returned. |
getValue is called on e1 ; if true , setValue is called on e2 . Note that e1 being false prevents any further setting from taking place. |
e1 | e2 , e1 bor e2 Bitwise or operator |
e1 and e2 are interpreted as integers and the result is an integer. |
Cannot be the top-level expression passed to setValue . |
e1 ^ e2 , e1 xor e2 Bitwise exclusive-or operator |
e1 and e2 are interpreted as integers and the result is an integer. |
Cannot be the top-level expression passed to setValue . |
e1 & e2 , e1 band e2 Bitwise and operator |
e1 and e2 are interpreted as integers and the result is an integer. |
Cannot be the top-level expression passed to setValue . |
e1 == e2 , e1 eq e2 Equality test e1 != e2 , e1 neq e2 Inequality test |
Equality is tested for as follows. If either value is null , they are equal if and only if both are null . If they are the same object or the equals() method says they are equal, they are equal. If they are both Number s, they are equal if their values as double-precision floating point numbers are equal. Otherwise, they are not equal. These rules make numbers compare equal more readily than they would normally, if just using the equals method. |
Cannot be the top-level expression passed to setValue . |
e1 < e2 , e1 lt e2 Less than comparison e1 <= e2 , e1 lte e2 Less than or equals comparison e1 > e2 , e1 gt e2 Greater than comparison e1 >= e2 , e1 gte e2 Greater than or equals comparison e1 in e2 List membership comparison e1 not in e2 List non-membership comparison |
The ordering operators compare with compareTo() if their arguments are non-numeric and implement Comparable ; otherwise, the arguments are interpreted as numbers and compared numerically. The in operator is not from Java; it tests for inclusion of e1 in e2, where e2 is interpreted as a collection. This test is not efficient: it iterates the collection. However, it uses the standard OGNL equality test. |
Cannot be the top-level expression passed to setValue . |
e1 << e2 , e1 shl e2 Bit shift left e1 >> e2 , e1 shr e2 Bit shift right e1 >>> e2 , e1 ushr e2 Logical shift right |
e1 and e2 are interpreted as integers and the result is an integer. |
Cannot be the top-level expression passed to setValue . |
e1 + e2 Addition e1 - e2 Subtraction |
The plus operator concatenates strings if its arguments are non-numeric; otherwise it interprets its arguments as numbers and adds them. The minus operator always works on numbers. | Cannot be the top-level expression passed to setValue . |
e1 * e2 Multiplication e1 / e2 Division e1 % e2 Remainder |
Multiplication, division, which interpret their arguments as numbers, and remainder, which interprets its arguments as integers. | Cannot be the top-level expression passed to setValue . |
+ e Unary plus - e Unary minus ! e , not e Logical not ~ e Bitwise not e instanceof class Class membership |
Unary plus is a no-op, it simply returns the value of its argument. Unary minus interprets its argument as a number. Logical not interprets its argument as a boolean. Bitwise not interprets its argument as an integer. The class argument to instanceof is the fully qualified name of a Java class. |
Cannot be the top-level expression passed to setValue . |
e . method ( args ) Method call e . property Property e1 [ e2 ] Index e1 .{ e2 } Projection e1 .{? e2 } Selection e1 .( e2 ) Subexpression evaluation e1 ( e2 ) Expression evaluation |
Generally speaking, navigation chains are evaluated by evaluating the first expression, then evaluating the second one with the result of the first as the source object. | Some of these forms can be passed as top-level expressions to setValue and others cannot. Only those chains that end in property references (e.property), indexes (e1[e2] ), and subexpressions (e1.(e2) ) can be; and expression evaluations can be as well. For the chains, getValue is called on the left-hand expression (e or e1 ), and then setValue is called on the rest with the result as the target object. |
constant Constant ( e ) Parenthesized expression method ( args ) Method call property Property reference [ e ] Index reference { e , … } List creation # variable Context variable reference @ class @ method ( args ) Static method reference @ class @ field Static field reference new class ( args ) Constructor call new array-component-class [] { e , … } Array creation #{ e1 : e2 , … } Map creation #@ classname @{ e1 : e2 , … } Map creation with specific subclass :[ e ] Lambda expression definition |
Basic expressions | Only property references (property ), indexes ([e] ), and variable references (#variable ) can be passed as top-level expressions to setValue . For indexes, getValue is called on e , and then the result is used as the property “name” (which might be a String or any other kind of object) to set in the current target object. Variable and property references are set more directly. |
推荐阅读
-
深入理解 logback 配置文件(logback.xml)详析
-
全面学习2021 Kubernetes CKS课程及模拟器实战笔记第1部分:理解k8s架构详析
-
理解Linux中utsname结构及其在utsname函数中的应用详析
-
深入理解C语言中的栈与堆概念及其实际运用详析
-
彻底理解Linux cp命令:参数与使用方法详析——轻松掌握Linux复制文件操作
-
实战教程:深入理解Java Swing中的JTable表格应用——实例3详析
-
速成C#.NET开发平台:深入理解三层架构详析
-
深入理解jmap命令:揭示Java虚拟机内存使用详析
-
深入理解原码、反码和补码的本质与详析
-
使用Struts2的OGNL表达式和ValueStack深入理解