IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> MVEL快速入门—MVEL基础语法讲解(一) -> 正文阅读

[Java知识库]MVEL快速入门—MVEL基础语法讲解(一)

概述

? 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解析等内容

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-24 15:25:20  更:2021-08-24 15:26:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 14:43:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码