Painless Script数据类型
2019-05-15 本文已影响0人
Ombres
官方文档:https://www.elastic.co/guide/en/elasticsearch/painless/current/index.html
数据类型
分为原始(primitive)、引用(reference)、动态(dynamic)三种类型,其前两种类型与Java基本相同。
原始类型(primitive)
原始类型用来表示构建在JVM中的基本数据,分配到非堆内存中。包括8种原始类型,byte
、short
、char
、int
、long
、float
、double
、boolean
。
每种原始类型一个相应的引用类型,在使用过程中可以自动拆装箱,基本与Java一致,但是有特殊的一点,原始类型可以直接装箱成引用类型,然后调用引用类型的方法。如下代码:
int i = 1;
i.toString(); // int类型的i会自动装箱为Integer,然后调用Integer类型的toString()方法
引用类型(reference)
引用类型是存储在堆中,默认值为 null
。
用法与Java中的引用类型基本相同,包含有静态成员字段、非静态成员字段、静态成员方法、非静态成员方法、构造器。
支持继承,用法与Java的继承基本相同。
动态类型(dynamic)
用 def
关键字定义 ,可以表示为原始类型和引用类型 ,默认值为 null
。在使用的过程中 def
表示基本类型时其实本质上还是引用类型。
def x = 1; // Declare def variable x and set it to the
// literal int 1
def l = new ArrayList(); // Declare def variable l and set it a newly
// allocated ArrayList
def
对于性能有一定的影响,如果要高效的使用脚本,写成静态类型更加合适。
特殊数据类型
与Java基本一致,不再具体介绍