二、java 與 scala相互調用


介紹: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實現

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM