面试题答案
一键面试应用方式不同
- Kotlin伴生对象
- 在Kotlin多平台项目中,伴生对象可通过实际定义在公共模块(如
commonMain
)中实现跨平台代码共享。例如:
expect class PlatformUtils actual object PlatformUtils { actual fun getPlatformInfo(): String { return "Common platform info" } } class MyClass { companion object { fun sharedFunction(): String { return PlatformUtils.getPlatformInfo() } } }
- 这样在不同平台模块(如
androidMain
、iosMain
)都可以使用MyClass.Companion.sharedFunction()
调用共享逻辑。
- 在Kotlin多平台项目中,伴生对象可通过实际定义在公共模块(如
- Java静态成员
- 在Java中实现跨平台共享静态成员相对复杂,一般通过创建跨平台库,在不同平台模块中依赖该库。例如,有一个跨平台库
common-library
,其中定义了静态类和方法:
public class Utils { public static String getSharedInfo() { return "Shared info from Java"; } }
- 在Android和iOS项目(通过JNI等方式与Java交互)中都可依赖该库来使用
Utils.getSharedInfo()
。
- 在Java中实现跨平台共享静态成员相对复杂,一般通过创建跨平台库,在不同平台模块中依赖该库。例如,有一个跨平台库
注意事项不同
- Kotlin伴生对象
- 平台特定实现:在多平台项目中,如果需要平台特定实现,可通过
expect
和actual
关键字来处理。如上述PlatformUtils
示例,不同平台(如androidMain
和iosMain
)可对getPlatformInfo
方法有不同的actual
实现。 - 初始化顺序:伴生对象在其所属类第一次被使用时初始化,在多平台环境下,要注意不同平台对类使用时机可能导致初始化顺序问题。例如,如果有多个伴生对象相互依赖,在不同平台上初始化顺序可能会影响程序行为。
- 平台特定实现:在多平台项目中,如果需要平台特定实现,可通过
- Java静态成员
- 跨平台依赖管理:在Java多平台开发中,不同平台依赖管理相对复杂。比如在Android和iOS混合开发中,要确保Java静态成员所在库在不同平台正确引用和配置。例如在Android项目中通过Gradle依赖,在iOS项目中通过JNI配置等,配置不当可能导致找不到类或方法。
- JNI调用:如果在iOS等非Java平台使用Java静态成员,通过JNI调用时,要注意数据类型转换和线程安全问题。例如Java的
String
与iOS的NSString
之间的转换,以及多线程环境下JNI调用的同步处理。