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") } }
执行结果依然正确。
scala如何解决类型强转问题的更多相关文章
- Gson转换复杂对象报错【类型强转错误】
一.问题: 项目里遇到一个需求,规则文件下载后,导入本地解析. 采用的方案是:获取复杂对象,使用谷歌Gson转换为字串保存为文件下载,客户端读取文件,解析字串,反解对象 遇到的问题:传输的对象是一个嵌 ...
- Scala的自定义类型标记
Scala的自定义类型标记 Scala中有很多千奇百怪的符号标记,看起来是那么的独特,就像是一杯dry martini-好像黑夜中的萤火虫,那么耀眼,那么出众. 好了言归正传,这一篇文章我们会讲一下S ...
- 第54讲:Scala中复合类型实战详解
今天学习了scala的复合类型的内容,让我们通过实战来看看代码: trait Compound_Type1trait Compound_Type2class Compound_Type extends ...
- 第53讲:Scala中结构类型实战详解
今天学习了scala的结构类型,让我们看看代码 class Structural {def open() = print("A class interface opened") } ...
- Scala 深入浅出实战经典 第54讲:Scala中复合类型实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Scala 深入浅出实战经典 第53讲:Scala中结构类型实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Scala的Option类型
Scala的Option类型 为了让所有东西都是对象的目标更加一致,也为了遵循函数式编程的习惯,Scala鼓励你在变量和函数返回值可能不会引用任何值的时候使用Option类型.在没有值的时候,使用No ...
- python类型强转&二级容器
Number 类型强转 int : ---->>> float, bool, complex, str Float : ---->> ...
- 【scala】基础类型
基础类型 位数 Boolean - Byte ...
随机推荐
- Mysql和SqlServer互相转换
环境: Windows XP sp2 MS SQL Server 2OOO sp1 MySql 5.0.41 1:MSSQLServer数据库导入到MySql数据库 步骤: 1.安装mysql数据库的 ...
- Android学习(十六) 通过GestureOverlayView进行手势识别
一.使用GestureOverlayView进行手势识别: 1.使用Gestures Builder生成手势文件,Gestures Builder为SDK中的示例项目,使用new-->Other ...
- UISearchBar 点击取消回到原来位置时会跳动的解决方法
今天改动项目里面測试给提的bug.有一个bug就是当点击UISearchBar的取消buttonUISearchBar回到原来位置时会发生偏差50像素左右的跳动,细致看看前面几个程序写的那个页面,也没 ...
- datatables插件适用示例
本文共四部分:官网 | 基本使用|遇到的问题|属性表 一:官方网站:[http://www.datatables.NET/] 二:基本使用:[http://www.guoxk.com/node/jQu ...
- react-native ListView 封装 实现 下拉刷新/上拉加载更多
1.PageListView 组件封装 src/components/PageListView/index.js /** * 上拉刷新/下拉加载更多 组件 */ import React, { Com ...
- 安装npm install时,长时间停留在某一处的解决方案
默认情况npm install安装时,会从 github.com 上下载文件,大部分安装不成功的原因都源自这里 因为 GitHub Releases 里的文件都托管在 s3.amazonaws.com ...
- asp.net core mvc视频A:笔记3-5.视图数据共享之TempData
前几节讲的都是单页面数据共享,从本节开始讲跨页面数据共享 创建项目3.5,新建控制器 代码 控制器 设置TempData 另一个视图中读取TempData数据 运行 此时如果刷新页面,页面中的内容“张 ...
- MQTT--mosquitto使用详解
mosquitto_pub(发布)的用法 用法: mosquitto_pub [-d] [-h hostname] [-i client_id] [-I client id prefix] [-p p ...
- 【JQuery Easy UI】后台管理系统的简单布局分享
重要说明:本博已迁移到 石佳劼的博客.有疑问请到 文章新地址 留言..! 近期做的一个简单的后台管理系统,当中用到了JQuery Easy UI框架,对于撸主这样的把控件能摆整齐就谢天谢地的码农来说, ...
- webAPI 405
web.config 配置 <system.webServer> <modules> <remove name="WebDAVModule" /> ...