scalaはどのようにタイプの強い回転の問題を解決します

2620 ワード

scalaはどのようにタイプの強い回転の問題を解決します
scalaは強いタイプの言語に属し、変数タイプを指定する際にデータ型を決定する必要があります.scalaが自慢の暗黙的なプッシュを持っていても、この場合によっては無力な場合があります.
例:
JAvaは同じ強いタイプの言語ですが、javaはタイプの強い回転を行うことができます.したがって,インタフェース向けプログラミングを行う場合,タイプ強転により符号化に問題がなければ,準備して使用するclassクラスを用いることができる.しかしscalaでは、この道は通じません.scalaはタイプが強くないからです.
どうすればいいの?
周知のように、scalaはコンパイル後にバイトコードファイルとなり、jvmで実行される.では、骨からscalaはjavaから脱胎したと言え、同じようにscalaはjavaのすべてのクラスライブラリを呼び出すことができます.それならjavaでタイプを借りずに強く回転しなければ、どうやって同じことをするのでしょうか.
結果は:反射!
次に、インタフェースクラスを定義します.
  ScalaInter
 trait ScalaInter { def myOut(str:String) } 
次に、2つのインプリメンテーションクラスを定義します.
  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") } }

実行結果は依然として正しい.