如果你想学从本文到一些开发技巧,那么可以关闭当前页面了。
因为这两个关键字,平时开发完全使用不到。
不希望让费你的时间。
这是,在kotlin开发中基本不会用到的两个关键字。
但是在kotlin sdk的源码中看到过很多次。
于是大叔十分好奇,这俩货到底是干嘛的?
一、expect 和 actual的作用
用来实现跨平台。
比如,你写了一个接口,在ios系统和android系统实现不一样。
那么可以如下图使用:
还没懂没关系,我们来看个真实案例,kotlin的KClass类。
二、KClass实际案例
如,Kotlin的KClass接口的实现,在kotlin-stdlib-common.jar中通过expect来申明某个接口是会有平台差异。
在kotlin-stdlib.jar中申明---jvm的实现
在kotlin-stdlib-js.jar中的申明 ---- js平台的实现
js和java中使用KClass
官方建议:
Don’t overuse expected and actual declarations – in some cases, an interface may be a better choice because it is more flexible and easier to test.
不要过于依赖expected 和 actual,使用接口和多态实现更好拓展,更方便测试。
三、总结:
expect 修饰类、成员变量或方法时,表示类、成员变量、方法,跨平台实现。
在具体的平台中,如ios中用actual修饰实现同名的类、方法、成员变量。
这两个关键字的中文翻译十分形象:
expect:期望的
actual:实际的
参考资料:
更多精彩原文:
- android获取进程名函数,如何优化到极致?
- android定位权限适配看这篇就够了
- 突破Android O 系统对Service的限制
- 详解:android O 对Service的限制【Background Execution Limits】
- 打破你的认知,java,除以0一定会崩溃吗?
- 把断言(Assert)用的淋漓精致,提高代码的健壮性
- java动态代理,轻轻松松从入门到精通
- 时间戳总结:System.nanoTime(),System.currentTimeMillis(),SystemClock