Kotlin与Java和JavaScript之间是如何互操作的?

6

Kotlin网站上写道:

Kotlin与Java完全兼容。

Kotlin是Java的子集/超集吗?

此外,文档说明Kotlin与JavaScript兼容,那么它如何编译以支持两者?Kotlin是否像Xamarin一样是跨平台语言?

Java能否转换回Kotlin?

1个回答

13
Kotlin是一种静态类型的编程语言,可以运行在Java虚拟机上,并且也可以编译成JavaScript源代码。这意味着Kotlin有两个编译器,前者生成的字节码可以在JVM中执行,后者仅生成JavaScript。这使得Kotlin能够与两种语言进行交互操作。
关于Kotlin和Java
例如,当Java字节码和Kotlin字节码在同一个JVM中运行时,您可以从Kotlin调用Java并且/或者从Java调用Kotlin从Kotlin调用Java代码从Java调用Kotlin

Kotlin专注于与Java的互操作性设计。可以自然地从Kotlin调用现有的Java代码,也可以很顺畅地从Java中使用Kotlin代码。

空安全和平台类型

Java中的任何引用都可能为null,这使得Kotlin对严格的空安全要求在来自Java的对象方面变得不切实际。 Kotlin中的Java声明类型被特殊处理,并称为平台类型。对于这种类型,空检查会放宽,因此对它们的安全保证与Java相同。

关于Kotlin和Javascript

同样地,当您使用生成JavaScript的Kotlin编译器时,您可以让Kotlin与JavaScript源文件一起在同一个JavaScript引擎中运行。因此,您可以从JavaScript 调用Kotlin和/或从Kotlin 调用JavaScript

从Kotlin调用JavaScript

Kotlin旨在与Java平台轻松互操作。它将Java类视为Kotlin类,Java也将Kotlin类视为Java类。但是,JavaScript是一种动态类型语言,这意味着它不会在编译时检查类型。您可以通过动态类型自由地从Kotlin访问JavaScript,但是如果您想要完整的Kotlin类型系统功能,则可以为JavaScript库创建Kotlin头文件。

从JavaScript调用Kotlin

Kotlin编译器生成普通的JavaScript类、函数和属性,您可以自由地从JavaScript代码中使用。然而,有一些微妙的事情需要记住。为了防止破坏全局对象,Kotlin创建一个包含当前模块所有Kotlin声明的对象。因此,如果您将模块命名为myModule,则所有声明都可以通过myModule对象在JavaScript中使用。

关于您对Xamarin的问题,我只能说Xamarin和Kotlin是两个完全不同的东西。您可以将Xamarin与Ionic或PhoneGap进行比较,因为它们都是可以创建多平台应用程序的产品。
另一方面,Kotlin是一种语言,您可以编译它以在不同的环境和/或设备上运行您的程序。

但是您必须记住,如果您从Kotlin调用Java代码,您将会失去一些Kotlin的特性,例如Null-Safety,因为Java中的每个对象都可以为空。 - antonicg
@antonicg 感谢您的建议,我已经添加了一段关于Null-Safety和平台类型的内容。 - freedev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接