尝试Ceylon的Java互操作性

作者:    |       Ceylon

终于可以编写、编译和运行在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 ".");
}

这可能看起来并不多,但这展示了互操作性的重要特性

  1. 将Java静态声明映射到Ceylon顶层声明的功能静态将Java静态声明映射到Ceylon顶层声明的功能
  2. 解析调用到正确重载版本的能力
  3. Java原始类型与java.lang.String和ceylon.language中的Ceylon类型之间的等价性ceylon.language,以及
  4. 将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的一部分发布。

干得好,伙计们!


回到顶部