images icon example java scala console scala-java-interop

icon - Cómo utilizar varala de Scala desde código Java



line border java example (1)

Puedes usar:

scala.collection.Seq$.MODULE$.empty();

desde el código de Java para crear una secuencia vacía. De lo contrario, puede utilizar:

new scala.collection.mutable.ArrayBuffer();

para crear un búfer de matriz vacío en el que luego puede agregar elementos y usarlo como un argumento para los métodos varala de Scala.

De lo contrario, si diseña una biblioteca de Scala con métodos vararg que desea usar desde el código Java, use la anotación varargs . Generará una versión de Java del método que toma una matriz en lugar de una Seq .

scala> class A { | @annotation.varargs def foo(x: Int*) { println(x) } | } defined class A scala> println(classOf[A].getMethods.toList) List(public void $line1.$read$$iw$$iw$A.foo(scala.collection.Seq), public void $line1.$read$$iw$$iw$A.foo(int[]), ...)

Arriba, la reflexión muestra que hay 2 versiones del método foo generado: una que toma una Seq[Int] y otra que toma una int[] .

Hay muchos artículos sobre cómo llamar a Java Varargs desde el código de Scala, pero lo único que pude encontrar al revés fue esta pregunta: el uso de los métodos de Scala Vararg en Java , que no tiene ningún ejemplo concreto.

Estoy tratando de usar scala.Console desde algún código Java, por la razón de que java.io.Console no funciona en Eclipse, mientras que Scala lo hace. Pero no consigo el método.

def readLine (text: String, args: Any*): String

para trabajar porque parece estar esperando un scala.collection.Seq[Any] para el segundo argumento, y no veo cómo crear un Seq en Java. ¿Cómo puedo solucionar esto?

Cosas que he probado:

1) Usando nulo

// Java String s = scala.Console.readLine("Enter text: ", null);

- obtener recompensado con una NullPointerException .

2) Reemplazando el null con scala.collection.Seq.empty() , pero javac informa todo tipo de errores, como que Seq no tiene un método empty .

3) Usar el objeto Nil en el objeto del paquete scala.collection.immutable , pero la sintaxis sugerida here , que sería scala.collection.immutable.package$Nil$.MODULE$ , pero eso no se puede resolver.

Por supuesto, podría usar el método readLine() que no toma varargs, pero sería demasiado fácil.