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

目录
  • 在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(_ + "," + _)

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

(0)

相关推荐

  • Scala之Object的具体使用(小结)

    一.前言 前面学习了Scala的Methods,接着学习Scala中的Object 二.Object Object在Scala有两种含义,在Java中,其代表一个类的实例,而在Scala中,其还是一个关键字,本篇首先将会把object当成一个类的实例看待,展示如何将对象从一种类型转化为另一种类型,之后将展示如何创建单例对象,Scala中还存在包对象,在Scala中,经常有如下定义 type Throwable = java.lang.Throwable type Exception = java

  • Java 和 Scala 如何调用变参

    Java 和 Scala 都支持变参方法, 写在最后的位置上,最基本的调用方式也都是一样的,一个个罗列过去.也可以传入数组参数,因为变参本质上就是一个数组,就是把 ... 开始位置到最后一个参数都收纳到数组中去,所以变参之所以要放在最后的位置上,且一个方法中最多只能有一个变参类型. 这里主要是对比 Scala 对变参方法的调用,基本调用法当然是没问题的,但是在传入数组作为变参的参数列表与 Java 相对时就稍有变化了. 另外提一下,如果想传入 List 作为变参列表,而不是整体作为变参的第一个元

  • Java8与Scala中的Lambda表达式深入讲解

    前言 最近几年Lambda表达式风靡于编程界.很多现代编程语言都把它作为函数式编程的基本组成部分.基于JVM的编程语言如Scala.Groovy及Clojure把它作为关键部分集成在语言中.而如今,(最终)Java 8也加入了这个有趣的行列. Java8 终于要支持Lambda表达式!自2009年以来Lambda表达式已经在Lambda项目中被支持.在那时候,Lambda表达式仍被称为Java闭包.在我们进入一些代码示例以前,先来解释下为什么Lambda表达式在Java程序员中广受欢迎. 1.为

  • 浅析Java和Scala中的Future

    随着CPU的核数的增加,异步编程模型在并发领域中的得到了越来越多的应用,由于Scala是一门函数式语言,天然的支持异步编程模型,今天主要来看一下Java和Scala中的Futrue,带你走入异步编程的大门. Future 很多同学可能会有疑问,Futrue跟异步编程有什么关系?从Future的表面意思是未来,一个Future对象可以看出一个将来得到的结果,这就和异步执行的概念很像,你只管自己去执行,只要将最终的结果传达给我就行,线程不必一直暂停等待结果,可以在具体异步任务执行的时候去执行其他操作

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

    目录 在Java中调用Scala的方法呢? 1.首先是静态方法 2. JAVA中调用Scala的方法 3.Scala中的非静态方法 4.Java中的调用 scala中调用java方法报错 在Scala中调用java的方法,很简单,直接导入传递参数就可以进行调用了. 在Java中调用Scala的方法呢? 经过测试,也是很简单,静态方法直接传递参数,就可以调用了,非静态的方法,使用对象也可以调用方法 具体如下: 1.首先是静态方法 object ScalaObjectDemo extends App

  • 浅谈js中子页面父页面方法 变量相互调用

    (1)子页面调用父页面的方法或者变量: window.parent.方法()或者变量名 window.parent相当于定位到父页面  之后的操作和在父页面中写代码一样写 window.parent.aa();//调取aa函数 window.parent.bb;//调取bb变量 例如:想在子页面中得到id为aaa的文本框的值 window.parent.$("#aaa").val();//这种写法的前提是引用了jquery window.parent.getElementById(&q

  • Java构造函数的相互调用代码示例

    在Java中,当为一个类创建了多个构造函数时,有时想在一个构造函数中调用另一个构造函数以减少代码量.这时可以使用this关键字来实现. 有关构造函数的相关内容,大家可以参阅:Java编程中的构造函数详细介绍 通常,当使用this关键字时,它意味着"这个对象"或者"当前对象",并且它自身产生对当前对象的引用.在一个构造函数中,当给传递给它一个参数列表时,它就有了不同的意义. 它将直接的调用能够匹配这个参数列表的构造函数.因此,我么可以直接的调用其它构造函数: pack

  • Android编程使用WebView实现与Javascript交互的方法【相互调用参数、传值】

    本文实例讲述了Android编程使用WebView实现与Javascript交互的方法.分享给大家供大家参考,具体如下: Android中可以使用WebView加载网页,同时Android端的Java代码可以与网页上的JavaScript代码之间相互调用. 效果图: (一)Android部分: 布局代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&qu

  • Java代码中与Lua相互调用实现详解

    目录 一.方案 二.性能测试 1. ScriptEngine调用方式 2. Globals调用方式 3. lua调用java 三.结论 四.其他调用方式? 一.方案 Java与Lua相互调用案例比较少,因此项目使用需要做详细的性能测试,本内容只做粗略测试. 目前已完成初版Lua-Java调用框架开发,后期有时间准备把框架进行抽象,并开源出来,感兴趣的小伙伴欢迎关注下. 目前最常见的方案:luaj,纯Java实现的Lua解析器,基于Lua 5.2 LuaJ的原理:用Java实现了一套Lua的编译器

  • ThinkPHP控制器间实现相互调用的方法

    本文实例讲述了ThinkPHP控制器间实现相互调用的方法.分享给大家供大家参考.具体实现方法如下: ThinkPHP同一个项目里,两个控制器的方法如何相互调用呢?ThinkPHP提供了一个A(),通过它可以使控制器之间的方法相互调用,使得代码可以重复利用. 官方似乎对A()方法没有相关使用文档,现在通过一个例子来说一下如使用A()方法. 有两个控制器,ColumnsAction和NewsAction.ncatlist()是ColumnsAction的分类列表方法,现在我要在控制器NewsActi

  • iframe的父子窗口之间的对象相互调用基本用法

    使用iframe的时候,可能会涉及到父子窗口之间传值和方法的相互调用,之前一直有些迷糊,也没有着意去弄清楚,这两天要干活,没法子了只好把这都弄明白了.其实非常简单,就那么几个用法,几句代码而已. 子窗口中调用父窗口的js方法: 复制代码 代码如下: parent.changeBtnTitle('tzgg'); 一个父窗口中可能会有若干个功能行为类似的子窗口,子窗口中的组件要调用相同或者类似的对象或者方法,那么就把这样的方法写在父窗口中,通过传递参数来达到不同的效果. 父窗口获得子窗口中的某个对象

  • Android WebView的使用方法及与JS 相互调用

    Android WebView的使用方法及与JS 相互调用 1.添加网络权限 <uses-permission android:name="android.permission.INTERNET" /> 2.WebSettings 对访问页面进行设置. WebView mWebView = new WebView(this); WebSettings webSettings = mWebView .getSettings();//支持获取手势焦点,输入用户名.密码或其他 m

  • js与applet相互调用的方法

    本文实例讲述了js与applet相互调用的方法.分享给大家供大家参考,具体如下: js调用java 可以在网页里使用 <script language=javascript> document.applets[0].java中的方法名 </script> 可以对applet进行控制,也可以从applet返回值. 返回值无需关心值得类型,js会隐式的转换. 传值到applet中应考虑类型匹配. java调用js 需要导入netscape.javascript.jsobject这个类

  • DWR中各种java方法的调用

    DWR是一个框架,简单的说就是能够在javascript直接调用java方法,而不必去写一大堆的javascript代码.它的实现是基于ajax的,可以实现无刷新效果. 网上有不少DWR的例子,但大都只是某种方法的调用,本文只在使用层面上介绍DWR,并不涉更多的技术与设计,其目的是让初学者能够很快的学会各种java方法在javascript中是如何调用的. 一.dwr配置篇之web.xml 1.最小配 <servlet> <servlet-name>dwr-invoker</

随机推荐