java - 从 Java(或 scala)调用具有类型参数的 Ceylon 顶级函数

标签 java scala ceylon

shared T f<T>(T t){
  return t;
}

我期待类似的事情

mod.f_.f[Integer](1)

在 scala 中工作,其中 [Integer] 是类型参数。但它不接受类型参数。

为什么 scala 看到的是 getter 而不是函数

shared Integer(Integer) fi = f<Integer>;

我预计 整数(整数) 足以告诉编译器将函数公开给 scala。

最佳答案

我不懂 Scala,所以我只能帮助解决 Java 部分,但以下是从 Java 调用该函数的方法:

f_.f(Integer.$TypeDescriptor$, Integer.instance(1))

或者:

f_.<Integer>f(Integer.$TypeDescriptor$, Integer.instance(1))

Ceylon 具有具体化的泛型,因此类型参数变成常规参数,并且您必须提供类型参数的类型描述符对象。 Ceylon 类和接口(interface)有一个静态 $TypeDescriptor$ 成员,您可以使用它;我不知道其他东西(Java 类、联合和交集类型等)是如何工作的,但您可以在 Ceylon 中编写等效的调用,并通过使用 编译生成的 Java 代码--verbose=代码

这是一个完整的工作示例,其中包含您的 f 函数和调用它的 Java 类 G:gist

关于java - 从 Java(或 scala)调用具有类型参数的 Ceylon 顶级函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43449732/

相关文章:

gradle - 使用 Gradle 编译 Ceylon 示例时出错

java - Iterator 的 remove 方法实际上是如何删除一个对象的

Java排序——全部大写优先

scala - 为什么不推荐使用没有参数列表的案例类?

scala - Spark SQL 查找列中的最小值并获取整行

ceylon - 如何在 ceylon 以优雅的方式按类型过滤?

java - 在Java中保存环境变量

java - CSS 表达式不适用于选择链接

java - 如何使用 OpenCV matchShapes 检查两个轮廓是否匹配?

ceylon - 如何在 Ceylon 中获取命令行参数?