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(_ + "," + _)