scala如何解決類型強轉問題


scala如何解決類型強轉問題

  scala屬於強類型語言,在指定變量類型時必須確定數據類型,即便scala擁有引以為傲的隱式推到,這某些場合也有些有心無力。

  例如:

    java同屬強類型語言,但java可以進行類型強轉。因此在進行面向接口編程時,借助類型強轉,只要編碼沒有問題,就可以使用准備使用的class類。但在scala中,這條路就走不通了。因為scala沒有類型強壯。

  那如何辦呢?

  眾所周知,scala編譯后變成字節碼文件,運行在jvm中。那么從骨子里,scala可以說是脫胎於java,同樣scala可以調用java所有的類庫。既然如此,如果在java中不借助類型強轉,又如何完成同樣的事情呢?

  結果是:反射

  下面我們定義一個接口類:

  ScalaInter

 trait ScalaInter { def myOut(str:String) } 

  然后定義兩個實現類:

  ScalaClass

class ScalaClass extends ScalaInter { def myOut(str:String)={ println("class1=="+str) } }

  ScalaClass2

class ScalaClass2 extends ScalaInter { def myOut(str:String)={ println("class2=="+str) } }

 

  下面我們要做的就是通過放射完成類型強轉的功能:

object ScalaTest { def main(args: Array[String]): Unit = {
    var er = Class.forName("org.andy.rtbd.run.ScalaClass2").newInstance().asInstanceOf[ScalaInter]
    er.myOut("ddd") } }

  首先通過反射得到一個基類,而后通過asInstanceOf得到運行時類對象。

  執行結果如下:

class2==ddd

  或者我們可以換成java版本的結果方案:

object ScalaTest { def main(args: Array[String]): Unit = { var er = Class.forName("org.andy.rtbd.run.ScalaClass2").newInstance() var b = classOf[ScalaInter].cast(er) b.myOut("ddd") } }

  執行結果依然正確。

 


免責聲明!

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



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