MVEL快速入门—MVEL基础语法讲解(一)

3 篇文章 1 订阅

概述

  MVEL是从英文翻译而来的,MVFLEX表达式语言是Java平台的动态/静态混合类型的运行时可嵌入表达式语言。该项目最初是作为应用程序框架的实用语言开始的,现在已完全独立开发。MVEL通常用于通过XML文件或注释等配置将基本逻辑公开给最终用户和程序员。它也可以用来解析简单的JavaBean表达式。

  在一些项目中我们需要对一些场景进行过滤并允许用户配置的时候,通常会采用MVEL表达式,比如:指定条件下更新数据;指定条件下采集数据等。

相关文章

 🔥 Java解析执行MVEL表达式

基本语法部分

简单属性表达

  下面是最简单的属性表达,他表示了从当时场景的上下文中获取一个student对象的name属性值,属性表达式是最常见的用途之一,允许 MVEL 用作性能非常高、易于使用、反射优化器。

student.name

  当然,我们还可以对它进行比较等操作,和Java代码类似:

student.name == 'ZhangSan'

  上面的表达式将会为我们返回一个boolean类型的结果,表示比对student.name是否等于“ZhangSan” ,其实除此之外,他还支持基本的运算优先级和括号的执行顺序,比如:

(student.name == 'ZhangSan') && ((student.age * 2) + 1) > 15

多语句表达

  MVEL同样支持多语句表达的形式,每一个语句最后都需要使用 “ ; ” (半角分号)进行分割。最后一句或只有一句的场景不需要分号。另外注意!不能用换行代替分号。比如:

statement1; statement2; statement3

返回值

  MVEL不需要显示的 return 需要返回的内容,它将自动获取最后一个语句的结果。比如:

a = 2;
b = (a + 10) * 10;
b

  以上语句将返回b的最终结果,也就是200。

值检测

判空

  类似于我们在Java中的判空操作,它为我们提供了类似于 Strings.isEmpty(String s) 的操作,能够直接判断出值是否是空的。

str == empty

  如果 str 是 null 或 “” 将会返回true,否则返回false

判空或零

  在一些基础类型中,我们可能需要排除值为0的场景;亦或是一些需要判断等于0或null的场景,请使用: null 或 nil 。下面举例中 例1 和 例2 完全相同:

例1:
price == null;
例2:
price == nil;

自动强转性

  在MVEL中,类似于一些类型不敏感的语言,它具有自动转型的能力,比如下面的语句,将会返回 true 的结果:

"123" == 123;

List / Arrays / Map 表达

Map

  MVEL提供了一种非常优雅的形式表达此类内容,整体赋值的感觉和php有些许类似但又有不同。

  比如表达一个Map<String, Person> 类型的数据,您可以使用下面的语句:

["ZhangSan" : new Person("ZhangSan"), "LiSi" : new Person("LiSi")]

  上面的代码相当于:

Map map = new HashMap();
map.put("ZhangSan", new Person("ZhangSan"));
map.put("LiSi", new Person("LiSi"));

  而且这种表达形式还可以直接作为方法的参数,比如下面语句是合法的:

someClass.someMethod(["mathTeacher" : "ZhangSan"]);

  总结来说,Map的格式表示:"[键1: 值1, 键2: 值2, ...]"

List

  List的表达方式是很简单,方括号中写需要的值就可以,中间使用逗号进行分割:

["apple", "banana", "orange"]

Array

  值的注意的是,Array表达形式和我们的List表达并不一样,两边换成了 {} ,比如:

{"apple", "banana", "orange"}

内联数组

  关于内联数组,需要了解的一个重要方面是它们可以被强制转换成其他数组类型的特殊能力。当你声明一个内联数组时,它是没有类型的,但比如说你要传递给一个接受int[]的方法。你可以简单地把你的代码写成下面这样。

someClass.someMethod({1,2,3,4});

后续

  欢迎查看后续内容,将介绍属性、Java解析等内容

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员麻薯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值