zoukankan      html  css  js  c++  java
  • 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")
              
      }
    
    }

      执行结果依然正确。

  • 相关阅读:
    字符转int 的几种方法
    递归在类中的写法
    修改多维才智的名字
    max中用 .net 判断输入的邮箱地址是否合格。
    找处场景中同名称的结点
    Android Button [ 学习笔记 一 ] 原创
    Android中Listview注意事项
    Android 移动开发一本就够学习笔记一
    ListActivity 学习[原创]
    在 Eclipse 中导入 Android 示例程序
  • 原文地址:https://www.cnblogs.com/vikings-blog/p/3941535.html
Copyright © 2011-2022 走看看