与
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/