Interoperabilidad Scala y Java

Java es uno de los principales lenguajes de programación y la función JVM (Java Virtual Machine) facilita el desarrollo en él. Pero hay pequeños ajustes y funciones en Java, por lo que los desarrolladores buscan diferentes opciones como Scala. La interoperabilidad de Scala y Java significa que un código escrito en uno se puede ejecutar fácilmente en otro con algunos cambios.

Teniendo en cuenta los beneficios de Scala como la característica funcional (escribir menos, trabajar más), estructuras de datos integradas, herencia potente y, lo que es más importante, compatibilidad con JVM, ha demostrado ser un lenguaje de programación eficaz.

A continuación se muestra un ejemplo de cómo convertir código Java en un código legible de Scala. Un ejemplo de trabajo con ArrayList es el siguiente:

// Java program to create and print ArrayList.
import java.util.ArrayList;
import java.util.List;
  
public class CreateArrayList
{
    public static void main(String[] args)
    {
        List<String> students = new ArrayList<>();
        students.add("Raam");
        students.add("Shyaam");
        students.add("Raju");
        students.add("Rajat");
        students.add("Shiv");
        students.add("Priti");
  
        //Printing an ArrayList.
        for (String student : students) 
        {
            System.out.println(student);
        }
    }
}

Producción:

Raam
Shyaam
Raju
Rajat
Shiv
Priti

Tan pronto como se inicia Scala REPL, las bibliotecas estándar de Java están disponibles. A veces se requiere agregar colecciones Java en código Scala. El mismo código se puede escribir en Scala de la siguiente manera:

// Scala conversion of the above program.
import java.util.ArrayList;
import scala.collection.JavaConversions._
  
// Creating object
object geeks
{
    // Main method
    def main(args: Array[String])  
    {
        val students = new ArrayList[String]
   
        students.add("Raam");
        students.add("Shyaam");
        students.add("Raju");
        students.add("Rajat");
        students.add("Shiv");
        students.add("Priti");
   
        // Printing the ArrayList
        for (student <- students) 
        {
            println(student)
        }
    }
}

Producción:

Raam
Shyaam
Raju
Rajat
Shiv
Priti

Sin embargo, hay algunas características y colecciones de Scala que carecen de la equivalencia de Java. La principal diferencia entre las colecciones de Java y Scala generalmente se presenta como A Scala Traversable no es Java Iterable y viceversa. Sin embargo, las conversiones son posibles usando algunos comandos. A veces, uno necesita pasar las colecciones de uno al código del otro. Para hacerlo posible, se agregan los siguientes comandos en código Scala:

scala> import collection.JavaConverters._
import collection.JavaConverters._

El siguiente ejemplo muestra la conversión de colecciones de Java a Scala y viceversa. .asJava y .asScala son funciones de extensión que permiten las conversiones antes mencionadas.

  • Para convertir las colecciones de Scala a Java :
    import scala.collection.JavaConverters._
    
    val listInScala = List(10, 20, 30)
    JavaLibrary.process(listInScala.asJava)
  • Para convertir las colecciones de Java a Scala :
    import scala.collection.JavaConverters._
    
    val JavaCol= JavaLibrary.getList
    val ScalaCol= JavaCol.asScala
  • Se puede incorporar una Scala Collection usando scala.collection y las subcolecciones se pueden incorporar usando scala.collection.mutabley scala.collection.immutable. Una colección mutable se puede cambiar, pero una colección inmutable no se puede cambiar. Sin embargo, todavía se pueden ejecutar operaciones como la adición en las colecciones, pero solo daría una nueva colección y dejaría la antigua sin cambios.

    Un ejemplo que muestra lo mismo es el siguiente:

    // Java Program to return a HashMap.
    import java.util.HashMap;
    import scala.collection.JavaConverters;
    import scala.Predef;
    import scala.Tuple2;
    import scala.collection.immutable.Map;
       
    public class ConvertToScala 
    {
        public static <A, B> Map<A, B> MapInScala(HashMap<A, B> exampleMap)
        {
            return JavaConverters.mapAsScalaMapConverter(exampleMap).
                    asScala().toMap(Predef.<Tuple2<A, B> >conforms());
        }
       
        public static HashMap<String, String> Example()
        {
            HashMap<String, String> exampleMap = new HashMap<String, String>();
            exampleMap.put("Ayush", "Boy");
            exampleMap.put("Ridhi", "Girl");
            exampleMap.put("Soumya", "Girl");
            return exampleMap;
        }
    }

    El código anterior se puede convertir en Scala de la siguiente manera:

    Versión Scala del programa anterior.

    scala> val javamap: java.util.HashMap[String, String] = ConvertToScala.Example
    javamap: java.util.HashMap[String, String] = {Ridhi=Niña, Soumya=Niña, Ayush=Niño}

    scala> val scalamap: Map[String, String] = ConvertToScala.MapInScala(javamap)
    scalamap: Map[String, String] = Map(Ridhi -> Girl, Soumya -> Girl, Ayush -> Boy)

    En conclusión, la interoperabilidad de Java y Scala requiere que algunas colecciones de Scala se asignen al código Java y viceversa. Aunque, programar en Scala no es tedioso y mejor que en Java teniendo en cuenta la menor cantidad de caracteres para escribir el código. Además, las conversiones de los dos códigos facilitan que los desarrolladores obtengan soporte de Scala con bastante frecuencia.

    ________________________________________________________________________________________

Publicación traducida automáticamente

Artículo escrito por muskangupta13 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *