欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-12 10:49:12
目录在java中调用scala的方法呢?1.首先是静态方法2. java中调用scala的方法3.scala中的非静态方法4.java中的调用scala中调用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(_ + "," + _)

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