oxb*_*kes 9 java interop scala variadic-functions
我在scala库类中有两个简单的方法:
class Foo {
def bar(args : String*) : Unit = println("Foo.bar with: " + args)
def bar(args : Array[String]) : Unit = bar(args.toSeq : _*)
}
Run Code Online (Sandbox Code Playgroud)
这一切都编译得很好.然后我把它放在一个库中foo.jar并尝试编译以下Java:
import Foo
public class Test {
public static void main(String[] args) {
Foo foo = new Foo();
foo.bar("Hello", "World"); //DOES NOT COMPILE
}
}
Run Code Online (Sandbox Code Playgroud)
我可以用以下内容替换违规行:
foo.bar(new String[] { "Hello", "World" }); //OK
Run Code Online (Sandbox Code Playgroud)
但这似乎打败了这一点.如何使用类似Java varargs的语法从Java调用它?
在 2.8(不知道 2.7)中,如果您从 Java 父级重写 varargs 方法,或者从 Java 接口实现 varargs 方法,那么 Scala 编译器将生成两种方法,一种用于 Scala,一种用于 Java。Java 的——正如您通过检查字节码 \xe2\x80\x94 所看到的那样,只是采用 varargs 数组并将其包装,然后将 WrappedArray 传递给需要 Seq 的 Scala 版本。
\n\n如果有办法强制编译器在其他情况下生成转发器,我不知道。我怀疑它是否存在。似乎提供一种请求它的方法(我猜是一个注释)将是一个合理的增强请求。
\n| 归档时间: |
|
| 查看次数: |
661 次 |
| 最近记录: |