Mutual call based on Scala and Java methods

  • 2021-12-11 17:58:30
  • OfStack

Directory calls Scala methods in Java? 1. Static method first 2. Method in JAVA calling Scala 3. Non-static method in Scala 4. Call in Java calling java method in scala to report error

In Scala call java method, very simple, direct import transfer parameters can be called.

What about calling the method of Scala in Java?

After testing, it is also very simple. Static methods can be called by passing parameters directly. Non-static methods can also be called by using objects

The details are as follows:

1. Static methods first


object ScalaObjectDemo extends  App { 
    println("hello cc i miss you very much"); 
    def say(name:String){
        println(name)
    }
 
    /**
      *  Go and call first java Method 
      * @return
      */
    def say3(): Int ={
        println(" This is scala The method of ")
        var tmp=JavaDemo.say2("4");
        println(tmp);
        tmp
    }
}

2. Methods in JAVA that call Scala


public class JavaDemo {
    public static void main(String[] args) {
        ScalaObjectDemo.main(new String[]{}); 
        ScalaObjectDemo.say("cc ");
 
        // Testing repeated method calls 
        int say3 = ScalaObjectDemo.say3();
        System.out.println(say3); 
    } 
 
    public static int say2(String age){
        System.out.println(" This is java Adj. static  Method "+age);
        return Integer.parseInt(age);
    }
}

3. Non-static method in 3. Scala


class ScalaClassDemo { 
  def hi(name:String):Int={
    println(name)
    1
  }
}
 

4. Calls in Java


int zhaojun = new ScalaClassDemo().hi("cc");
System.out.println(zhaojun);

After testing, all of them can run normally.

Call java method in scala to report error

There is 1 java method that returns 1 object


public Map<String, String> getFieldTypeMap() {
    ...
}

Now call this method in scala


val fieldTypeMap = someObject.getFieldTypeMap()
val innerSQL = fieldTypeMap.map { case (key: String, value: String) => key.replace(".", "_")}.toStream.sorted.reduce(_ + "," + _)

Error reporting:

Error:(19, 35) value map is not a member of java.util.Map[String,String]

val structureSQL = fieldTypeMap.map{ case (key: String, value: String) = > key.replace(".", "_")

Need to add:


@Deprecated
import scala.collection.JavaConversions._

Need to add:


import scala.collection.JavaConverters.mapAsScalaMapConverter

Then use toScala when using:


val fieldTypeMap = someObject.getFieldTypeMap()
val innerSQL = fieldTypeMap.toScala.map { case (key: String, value: String) => key.replace(".", "_")}.toStream.sorted.reduce(_ + "," + _)

Related articles: