一、支持的类型

1、IDL支持常见的基本类型,常量,枚举,容器,结构体,服务。不支持多态和重载,参数、返回值不能为空,各个基本类型的标识如下:

bool:对应java的boolean,布尔类型(true or value),占一个字节

byte:对应java的byte有符号字节

i16:16位有符号整型,对应java的short

i32:32位有符号整型,对应java的int

i64:64位有符号整型,对应java的long

double:64位浮点数,对应java的long

string:未知编码或者二进制的字符串,对应java的String

binary:二进制数据,对应java的ByteBuffer

2、IDL 可支持list,map,set等容器,其中list对应java中的ArrayList,map对应java中的HashMap,set对应于java的HashSet。

struct Test {
1: map<string, User> usermap,
2: set<i32> intset,
3: list<double> doublelist
}

3、IDL通过struct关键字定义结构体,结构体在java中对应的是实体类。它与java中的class差不多,但有一些不同,下面是他的约束:

  • struct不能继承,但是可以嵌套,不能嵌套自己。

  • 其成员都是有明确类型

  • 成员是被正整数编号过的,其中的编号是不能重复的,这个是为了在传输过程中编码使用。

  • 成员分割符可以是逗号(,)或是分号(;),而且可以混用

  • 字段会有optional和required之分和protobuf一样,但是如果不指定则为无类型–可以不填充该值,但是在序列化传输的时候也会序列化进去,optional是不填充则不序列化,required是必须填充也必须序列化。

  • 6.每个字段可以设置默认值

  • 7.同一文件可以定义多个struct,也可以定义在不同的文件,进行include引入。

struct User{
1: required string name, //改字段必须填写
2: optional i32 age = 0; //默认值
3: bool gender //默认字段类型为optional
}

4、支持enum(枚举)类型,但也有一些约束;

  • 编译器默认从0开始赋值

  • 可以赋予某个常量某个整数

  • 允许常量是十六进制整数

  • 末尾没有分号

  • 给常量赋缺省值时,使用常量的全称

注意:枚举枚举类嵌套,枚举常量必须是32位的正整数

enum HttpStatus {
OK = 200,
NOTFOUND=404
}

5、常量,只需要在变量前面加上const即可。

二、类型定义

Thrift支持C/C++类型定义,例如:

typedef i32 myint

typedef i64 usernumber

三、Exception (异常)

异常在语法和功能上类似于结构体,差别是异常使用关键字exception,而且异常是继承每种语言的基础异常类。

四、Service (服务定义类型)

这个是最重要的,在mtThrift中的所有对外提供的服务接口都通过这个定义。定义方式类似于java中的接口定义

service HelloService {
i32 sayInt(1:i32 param)
string sayString(1:string param)
bool sayBoolean(1:bool param)
void sayVoid()
}

五、Namespace (名字空间)

namespace java com.example.test == package com.example.test

  

最新文章

  1. Python生成器的经典程序
  2. logstash 配置文件实例
  3. Android之多线程断点下载
  4. OpenGL extension specification (from openGL.org)
  5. Linux内核抢占与中断返回【转】
  6. hdu 1142 用优先队列实现Dijkstra
  7. DAG上的动态规划之嵌套矩形
  8. 4)Java容器类相关知识
  9. eclipse的scala环境搭建
  10. php集成开发环境的安装以及Zend Studio开发工具的安装
  11. hdu 4696 Answers
  12. [XML] resources的Xml配置文件 (转载)
  13. POJ2442 Sequence
  14. 以Android环境为例的多线程学习笔记(二)-----------------锁和条件机制
  15. SiteMesh
  16. ASP.NET中使用Server.Transfer()方法在页间传值 实例
  17. 201521123039 《java程序设计》第七周学习总结
  18. PHP实现excel
  19. javascript技巧及常用事件方法集合(全)
  20. 配置hive使用mysql存储metadata metadatastore

热门文章

  1. 【我的Android进阶之旅】如何快速寻找Android第三方开源库在Jcenter上的最新版本
  2. 初级dba学习之路参考
  3. struts2基础——需要注意的几点
  4. 如何优雅地使用 Stack Overflow
  5. Oracle数据库安全(二)资源限制于口令管理
  6. websocket redis实现集群即时消息聊天
  7. poj3125
  8. 哆啦A梦里的某一首诗
  9. Python3.x:判断字符串是否为全数字、英文、大写、小写、空白字符
  10. samba 4.7.16 安装配置详解