终于可以编写、编译和运行在Ceylon IDE中使用Java库的Ceylon代码了
import java.lang { System { sysprops=properties } } import java.util { Date } void greet() { value date = Date(); print("Hello, " sysprops.getProperty("user.name", "world") ", the date is " date.day "/" date.month "/" 1900+date.year "."); }
这可能看起来并不多,但这展示了互操作性的重要特性
- 将Java静态声明映射到Ceylon顶层声明的功能静态将Java静态声明映射到Ceylon顶层声明的功能
- 解析调用到正确重载版本的能力
- Java原始类型与java.lang.String和ceylon.language中的Ceylon类型之间的等价性ceylon.language,以及
- 将JavaBeans属性自动映射到Ceylon属性的能力。
这是一个第二个工作示例
import java.lang { System { sysprops=properties } } import java.io { File } void listHomeDir() { for (file in File(sysprops.getProperty("user.home")).listFiles()) { print(file.canonicalPath); } }
Java互操作性对我们来说是一个有点棘手的问题,因为Ceylon的类型系统与Java的不同,而且Ceylon语言模块的设计并不是基于Java SDK。当在Java VM上运行时,语言模块确实在其内部实现中使用了Java SDK。但当在JavaScript VM上运行时,当然不能这样做。因此,我们必须限制我们对JVM特定内容的依赖。
我们还有一些事情要完成。例如,我们对数组和JavaIterable的处理还没有完全完成,一些IDE功能仍不正常工作,但我认为大部分困难的工作已经完成,准备作为Ceylon M2的一部分发布。
干得好,伙计们!