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

  执行结果依然正确。

最新文章

  1. 最新版 chrome 33中,backgroundPosition 改了.
  2. OpenGL学习进程(13)第十课:基本图形的底层实现及算法原理
  3. python 三元运算符
  4. mysql引擎整理
  5. Compound Interest Calculator4.0
  6. 比较字符串,equals防空指针问题
  7. MFRCC522 SPI无法通讯【worldsing笔记】
  8. [jQuery] Cannot read property ‘msie’ of undefined错误的解决方法
  9. java 通过TCP\UDP 协议实现多人聊天,点对点,文件传送-----分服务器端和客户端
  10. C博客作业03--函数
  11. IDEA Maven的下载和配置
  12. 【转】实习小记-python中可哈希对象是个啥?what is hashable object in python?
  13. 向github上提交自己的project
  14. JSSDK微信支付封装的支付类方法,代码比较齐全,适合收藏
  15. 国网SGCC_UAP 反编译.class文件源代码
  16. provider和consumer配置参数的优先级
  17. Spring学习笔记2——表单数据验证、文件上传
  18. 20145316许心远《网络对抗》EXP8 Web基础
  19. startActivityForResult( )用法
  20. 微信图片上传,遇到一个神奇的jgp

热门文章

  1. windows pip源
  2. react-native 项目实战 -- 新闻客户端(2) -- 完善TabBar
  3. vi 替换操作
  4. ajax个人学习笔记
  5. C#中的里氏替换原则
  6. 原 [Android]LIstView的HeaderView
  7. Spring Boot从入门到实战:整合通用Mapper简化单表操作
  8. 【JMeter4.0学习(三)】之SoapUI创建WebService接口模拟服务端以及JMeter对SOAP协议性能测试脚本开发
  9. Android Studio 默认的快捷键
  10. Python 类方法、实例方法、静态方法