kotlin跨平台之expect && actual

4,072 阅读2分钟

如果你想学从本文到一些开发技巧,那么可以关闭当前页面了。

因为这两个关键字,平时开发完全使用不到。

不希望让费你的时间。

这是,在kotlin开发中基本不会用到的两个关键字。

但是在kotlin sdk的源码中看到过很多次。

于是大叔十分好奇,这俩货到底是干嘛的?

一、expect 和 actual的作用

用来实现跨平台。

比如,你写了一个接口,在ios系统和android系统实现不一样。

那么可以如下图使用:

Expect and actual declarations

还没懂没关系,我们来看个真实案例,kotlin的KClass类。

二、KClass实际案例

如,Kotlin的KClass接口的实现,在kotlin-stdlib-common.jar中通过expect来申明某个接口是会有平台差异。

image-20210723102139187

在kotlin-stdlib.jar中申明---jvm的实现

image-20210723102702008

在kotlin-stdlib-js.jar中的申明 ---- js平台的实现

image.png

js和java中使用KClass

image.png

官方建议:

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:实际的

参考资料:

kotlinlang.org/docs/mpp-co…

更多精彩原文: