介绍:scala 是简化的java,运行于jvm的脚步语言。Java和scala通过各自编译器编译过都是jvm能解析class文件。本文介绍java和scala如何互调

 scala的源代码文件是以.scala为后缀的,编译后的文件class文件。
 
1.scala使用JDK的java类
 
用法:import 要使用java类,在scala代码内Java类
 
import java.lang.reflect._
import  java.util.Date//导入java类
 
println("Today is " + new Date())
 
val methods = getClass.getMethods()//使用java类
methods.foreach {
  methods: Method => println(methods.getName)
}
 
2.scala使用java类
 
用法:跟scala使用JDK的java类方法一样,但是java类编译后的类文件,存放在scala文件所在的包目录下,才能通过编译和使用
 
object UseInvestment {
 
  def main(args: Array[String]) {
    val investment = new Investment("xyz Corporation", InvestmentType.STOCK) //java类
    println(investment.getClass())
 
    val theYield = investment.`yield` // yield是scala关键字,所以要`括起来`
    println("theYield is " + theYield);
  }
 
}
 
Investment和InvestmentType分别是Java类
 
public class Investment {
    private String investmentName;
    private InvestmentType investmentType;
 
    public Investment(String name, InvestmentType type) {
        investmentName = name;
        investmentType = type;
    }
 
    public int yield() {
        return 0;
    }
}
 
public enum InvestmentType {
    SHORT_TERM,
    BOND,
    STOCK
}
 
3. java使用scala
 
用法:Car的class类要在classPath内,import 要使用scala类。
在Java代码内按java语法来是使用scala类
 
//--------------scala类--------------------------
class Car(val year: Int) {
  private[this] var miles: Int = 0
 
  def drive(distance: Int) {
    miles += distance
  }
 
  override def toString(): String = "year:" + year + " miles:" + miles
}
 
//-----------java类-------------------------
public class UseCar {
 
    public static void main(String[] args) {
        Car car = new Car(2009);
 
        System.out.println(car);
        car.drive(10);
        System.out.println(car);
    }
 
}
 
note:
Car的class类要在classPath内,UseCar 才能通过编译
 
4.java使用伴生对象
 
------------伴生对象----------------
class Buddy {
  def greet() {
    println("Hello from Buddy class")
  }
}
 
object Buddy {
  def greet() {
    println("Hello from Buddy object")
  }
}
 
---------------java类------------------------
public class BuddyUser {
    public static void main(String[] args) {
        new Buddy().greet();//使用伴生类
        Buddy$.MODULE$.greet();//使用伴生对象
    }
}
 
note:
java使用伴生对象: 伴生对象名$.MODULE$.方法名();//
 
5.java使用trait
 
//--------------------trait----------------
trait Writable {
  def write(message: String): Unit
}
 
//--------java---------------------------------
public class AWritable implements Writable {
    public void write(String message) {
        System.out.println(message);
    }
 
    public static void main(String[] args) {
        Writable writable = new AWritable();
        writable.write("依晨");
    }
}
 
note:
java使用trait,通过implements 实现trait,当接口使用
必须按接口标准。trait方法有自己实现,Java类使用trait不会使用trait实现

 

 

二、java 与 scala相互调用的更多相关文章

  1. Android JNI学习(三)——Java与Native相互调用

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  2. java 与 R 相互调用

    https://www.r-project.org/ http://cos.name/2013/08/r-rjava-java/ http://blog.csdn.net/hwssg/article/ ...

  3. jni java C/C++ 相互调用

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha java 中  声明 一个 native 方法 用javah命令 生成 包含 nativ ...

  4. 两个Java项目之间相互调用

    转自:http://dysfzhoulong.iteye.com/blog/1008747 一个项目A另一个项目B:(项目A和项目B都是Java写的项目) 在A项目中怎么调用B项目中的类和方法 有两种 ...

  5. JAVA与.NET的相互调用——通过Web服务实现相互调用

    JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有很多相似的地方.而在很多大型的开发项目里面,往往需要使用两种语言进行集成开发.而很多的开发人员都会偏向于其中一种语言,在使用集成开发的时候 ...

  6. Hybrid App开发模式中, IOS/Android 和 JavaScript相互调用方式

    IOS:Objective-C 和 JavaScript 的相互调用 iOS7以前,iOS SDK 并没有原生提供 js 调用 native 代码的 API.但是 UIWebView 的一个 dele ...

  7. 二、Cocos2dx中Android部分的c++和java实现相互调用(高级篇)

    本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=97 本文目的 要完成在cocos2dx的场景上一个点击事件,传递一个消息到java层,下面让我们看看 ...

  8. Java与.NET 的Web Services相互调用

    一:简介 本文介绍了Java与.NET开发的Web Services相互调用的技术.本文包括两个部分,第一部分介绍了如何用.NET做客户端调用Java写的Web Services,第二部分介绍了如何用 ...

  9. JAVA和C/C++之间的相互调用。

    在一些Android应用的开发中,需要通过JNI和 Android NDK工具实现JAVA和C/C++之间的相互调用. Java Native Interface (JNI)标准是java平台的一部分 ...

随机推荐

  1. 又一次发现Oracle太美之awr相关脚本简介

    又一次发现Oracle太美之awr相关脚本简介 大家知道在$ORACLE_HOME/rdbms/admin下,有例如以下的相关脚本(我的环境为11.2.0.4.2): [oracle@rh64 ~]$ ...

  2. Computer Vision: Algorithms and ApplicationsのImage processing

    实在是太喜欢Richard Szeliski的这本书了.每一章节(after chapter3)都详述了该研究方向比較新的成果.还有很多很多的reference,假设你感兴趣.全然能够看那些參考论文 ...

  3. OJ的runtime error exit code对应SIGTERM代码

    Signal Name Number Description SIGHUP 1 Hangup (POSIX) SIGINT 2 Terminal interrupt (ANSI) SIGQUIT 3 ...

  4. stack-铁轨问题

    每辆火车都从A方向驶入车站,再从B方向驶出车站,同时它的车厢可以进行某种形式的重新组合.假设从A方向驶来的火车有n节车厢(n<1000),分别按顺序编号为1,2,...,n.假定在进入车站之前每 ...

  5. SDUT 1048 Digital Roots

    Digital Roots Time Limit: 1000ms   Memory limit: 65536K 题目描述 The digital root of a positive integer ...

  6. python再议装饰器

    装饰器实质还是一个函数,是对其他函数进行装饰的函数.装饰器函数接受被装饰函数的函数名,返回被装饰函数的函数名.对一个函数进行装饰有两个原则:一是不能修改被装饰函数的源代码:二是被装饰函数的调用方式不可 ...

  7. Python基础-读取excel

    import xlrdbook = xlrd.open_workbook('lanxia.xls')sheet = book.sheet_by_name('sheet1')rows = sheet.n ...

  8. Python习题-统计日志中访问次数超过限制的IP

    #1.1分钟之内ip访问次数超过200次的,就给他的ip加入黑名单#需求分析: #1.读日志,1分钟读一次 #2.获取这1分钟之内所有访问的ip #3.判断ip出现的次数,如果出现200次,那么就加入 ...

  9. JavaUtil_09_通用工具类-01_Hutool

    一.重要的官方资料 1. Hutool 官网 2. Hutool 参考文档 3. Hutool API文档

  10. Git_学习_06_ 放弃本地修改

    一.未使用 git add 缓存代码时 git checkout -- filepathname // 放弃某个文件 git checkout . // 放弃所有文件 git checkout . 用 ...