📜  Scala 和Java互操作性

📅  最后修改于: 2022-05-13 01:55:20.317000             🧑  作者: Mango

Scala 和Java互操作性

Java是顶级编程语言之一,而JVM (Java虚拟机)设施使其更容易在其中进行开发。但是Java中有一些小的调整和特性,因此开发人员会寻找不同的选项,例如 Scala。 Scala 和Java的互操作性意味着用一个代码编写的代码可以通过一些更改轻松地在另一个代码中执行。

考虑到 Scala 的功能特性(Write less, Work More)、内置数据结构、强大的继承以及最重要的 JVM 支持等优点,它已被证明是一种有效的编程语言。

下面显示了将Java代码转换为 Scala 可读代码的示例。使用 ArrayList 的示例如下:

// 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 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);
        }
    }
}

输出:

Raam
Shyaam
Raju
Rajat
Shiv
Priti

一旦 Scala REPL 启动, Java标准库就可用。有时需要在 Scala 代码中添加Java集合。相同的代码可以用 Scala 编写如下:

// 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)
        }
    }
}

输出:

Raam
Shyaam
Raju
Rajat
Shiv
Priti

但是,有一些 Scala 特性和集合缺乏Java等效性。 Java和 Scala 集合之间的主要区别通常是因为 A Scala Traversable 不是Java Iterable ,反之亦然。但是,可以使用某些命令进行转换。有时,一个人需要将自己的集合传递给另一个人的代码。为了使它成为可能,在 Scala 代码中添加了以下命令:

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

以下示例显示了Java集合到 Scala 的转换,反之亦然。 .asJava.asScala是支持上述转换的扩展函数。

  • 要将 Scala 集合转换为Java
    import scala.collection.JavaConverters._
    
    val listInScala = List(10, 20, 30)
    JavaLibrary.process(listInScala.asJava)
  • 要将Java集合转换为 Scala
    import scala.collection.JavaConverters._
    
    val JavaCol= JavaLibrary.getList
    val ScalaCol= JavaCol.asScala

    Scala Collection 可以使用scala.collection合并,子集合可以使用scala.collection.mutablescala.collection.immutable合并。可变集合可以更改,但不可变集合不能更改。但是,仍然可以在集合上运行诸如添加之类的操作,但它只会给出一个新集合,而旧集合保持不变。

    显示相同的示例如下:

    // 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  Map MapInScala(HashMap exampleMap)
        {
            return JavaConverters.mapAsScalaMapConverter(exampleMap).
                    asScala().toMap(Predef. >conforms());
        }
       
        public static HashMap Example()
        {
            HashMap exampleMap = new HashMap();
            exampleMap.put("Ayush", "Boy");
            exampleMap.put("Ridhi", "Girl");
            exampleMap.put("Soumya", "Girl");
            return exampleMap;
        }
    }
    
    上面的代码可以在Scala中转换如下:

    上述程序的 Scala 版本。

    总之, Java和 Scala 互操作性需要将一些 Scala 集合分配给Java代码,反之亦然。尽管如此,考虑到编写代码的字符数较少,使用 Scala 进行编程并不比使用Java更乏味且更好。此外,这两种代码的转换使开发人员更容易经常获得 Scala 的支持。

    ________________________________________________________________________________________