top of page

3 Interacción con Java

 


Uno de los puntos fuertes de Scala es que permite muy facilmente interactuar con código Java. Por defecto se importan todas las clases del paquete java.lang, el resto necesitan ser importadas de manera explícita. Veamos un ejemplo que nos lo muestre. Queremos obtener la fecha actual y darle formato de acuerdo a la convención de un país específico, digamos Francia1. Las librerias de Java tienen definidas clases muy potentes como Date y DateFormat. Puesto que Scala interopera directamente con Java, no hay necesidad de implementar clases equivalentes en la libreria de clases de Scala, basta simplemente con importar las clases de los correspondientes paquetes de Java: 

 

import java.util.{Date, Locale}
import java.text.DateFormat
import java.text.DateFormat._

 

object FrenchDate {
    def main(args: Array [String] ) {
        val now = new Date
        val df = getDateInstance(LONG, Locale.FRANCE)
        println(df format now)
    }
}


La instrucción para importar en Scala se parece mucho a su equivalente de Java, pero en realidad es más potente. Se pueden importar varias clases del mismo paquete encerrandolas entre llaves como en la primera línea. Otra diferencia es que cuando queremos importar todos los nombres de un paquete o de una clase, se utiliza el carácter guión bajo (_) en vez del asterisco (*). Esto se debe a que el asterisco es un identificador válido en Scala (es decir, el nombre de un método), como veremosmás adelante.


Por tanto el import de la tercera línea importa todos los miembros de la clase DateFormat. Esto hace que sean visibles directamente el método estático getDateInstance y el campo estático LONG. Dentro del método main primero creamos una instancia de la clase Date de Java que por defecto contiene la fecha actual. Después definimos un formato de fecha utilizando el método estático getDateInstance que hemos importado previamente. Y por último, mostramos la fecha actual formateada del cuerdo a la instancia localizada de DateFormat. Los métodos que reciben un solo argumento se pueden usar con sintaxix infix, es decir, la expresión

 

df format now

 

es simplemente otra manera ligeramente más corta de escribir la expresión

 

df.format(now)

 

Esto puede parecer un detalle sintáctico menor, pero tiene consecuencias importantes, una de las cuales detallaremos en la próxima sección. Para acabar con este apartado sobre la interacción con Java, hay que mencionar que en Scala es también posible heredar de clases Java e implementar interfaces de Java.

bottom of page