前言
最近公司项目需要用aidl,遇到了方法参数传过去为空的问题,最后把所有参数前缀改成inout搞定,虽然避免了问题,但还是解决问题比较好,于是我花了大半个下午枚举了下,测试出了这些前缀的作用。
定义
- 前缀的作用是相对于调用这个方法的对象而言的;可将调用者称为客户端,实现方法的叫服务端
- 将服务端能够在客户端调用方法后可以正确收到方法参数值(不报错,不为空),称之为客户端可以写入
- 将客户端能够在服务端改变参数的值后收到改变后的值,称之为服务端可以写入
测试
客户端 | 服务端 | 结果 |
---|---|---|
in | in | ? 客户端可以写入;服务端不能写入 |
in | out | ? 客户端不能写入(为空);服务端不能写入 |
in | inout | ? 客户端可以写入;服务端不能写入 |
out | in | ? 客户端不能写入(报错) |
out | out | ? 客户端不能写入(为空);服务端可以写入 |
out | inout | ? 客户端不能写入(报错) |
inout | in | ? 客户端可以写入;服务端不能写入 |
inout | out | ? 客户端不能写入(为空);服务端可以写入 |
inout | inout | ? 客户端可以写入;服务端可以写入 |
结论:
- 两边都有in时,客户端才能写入。
- 两边都有out时,服务端才能写入。
- 客户端为out,且服务端有in时,会报空指针异常。
- 客户端和服务端方法参数前缀可以不同,但如果方法不同(比如一方多了方法)则可能造成问题。