基于Scala和Java方法的相互调用

编辑: admin 分类: java 发布时间: 2021-12-03 来源:互联网
目录
  • 在Java中调用Scala的方法呢?
    • 1.首先是静态方法
    • 2. JAVA中调用Scala的方法
    • 3.Scala中的非静态方法
    • 4.Java中的调用
  • scala中调用java方法报错

    在Scala中调用java的方法,很简单,直接导入传递参数就可以进行调用了.

    在Java中调用Scala的方法呢?

    经过测试,也是很简单,静态方法直接传递参数,就可以调用了,非静态的方法,使用对象也可以调用方法

    具体如下:

    1.首先是静态方法

    object ScalaObjectDemo extends  App { 
        println("hello cc i miss you very much"); 
        def say(name:String){
            println(name)
        }
     
        /**
          * 先去调用java方法
          * @return
          */
        def say3(): Int ={
            println("这里是scala的方法了")
            var tmp=JavaDemo.say2("4");
            println(tmp);
            tmp
        }
    }
    

    2. JAVA中调用Scala的方法

    public class JavaDemo {
        public static void main(String[] args) {
            ScalaObjectDemo.main(new String[]{}); 
            ScalaObjectDemo.say("cc ");
     
            //测试反复的方法调用
            int say3 = ScalaObjectDemo.say3();
            System.out.println(say3); 
        } 
     
        public static int say2(String age){
            System.out.println("这里是java的static 方法了"+age);
            return Integer.parseInt(age);
        }
    }

    3.Scala中的非静态方法

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

    4.Java中的调用

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

    经过测试全部能正常运行。

    scala中调用java方法报错

    有一个java方法返回一个对象

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

    现在在scala中调用该方法

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

    报错:

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

    需要添加:

    @Deprecated
    import scala.collection.JavaConversions._

    需要添加:

    import scala.collection.JavaConverters.mapAsScalaMapConverter

    然后在使用时用toScala:

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

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。

    【来源:自由互联:http://www.1234xp.com/meiguo.html