首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >scala如何解决类型强转问题

scala如何解决类型强转问题

作者头像
随机来个数
发布2018-04-16 15:41:43
1.8K0
发布2018-04-16 15:41:43
举报
文章被收录于专栏:写代码的海盗写代码的海盗

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")
          
  }

}

  执行结果依然正确。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-08-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • scala如何解决类型强转问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档