java scala object_Scala之Object的具体使用(小结)

一、前言

前面学习了Scala的Methods,接着学习Scala中的Object

二、Object

Object在Scala有两种含义,在Java中,其代表一个类的实例,而在Scala中,其还是一个关键字,本篇首先将会把object当成一个类的实例看待,展示如何将对象从一种类型转化为另一种类型,之后将展示如何创建单例对象,Scala中还存在包对象,在Scala中,经常有如下定义

type Throwable = java.lang.Throwable

type Exception = java.lang.Exception

type Error = java.lang.Error

type Seq[+A] = scala.collection.Seq[A]

val Seq = scala.collection.Seq

使用type定义可以使得代码更为简洁,可使用伴生对象来创建静态方法,并且伴生对象可以使得在创建类对象时不需要使用new关键字,如下所示

val siblings = List(Person("Kim"), Person("Julia"), Person("Kenny"))

2.1 对象转化

1. 问题描述

你需要将一个类的实例从一种类型转化为另一种类型,如动态创建对象

2. 解决方案

使用asInstanceOf方法进行类型转化,如下的lookup方法返回的对象将给转化为Recognizer对象

val recognizer = cm.lookup("recognizer").asInstanceOf[Recognizer]

以上代码在Java中如下

Recognizer recognizer = (Recognizer)cm.lookup("recognizer");

asInstanceOf方法是定义在Any类中的,所以任何类中都可以使用该方法

3. 讨论

在动态编程中,经常需要从一个类转化为另一个类,如在Spring框架中使用ApplicationContext文件来初始化Bean

// open/read the application context file

val ctx = new ClassPathXmlApplicationContext("applicationContext.xml")

// instantiate our dog and cat objects from the application context

val dog = ctx.getBean("dog").asInstanceOf[Animal]

val cat = ctx.getBean("cat").asInstanceOf[Animal]

在进行数字类型转化时,也可以使用asInstanceOf方法

59849aba91562754ffd28771fe1c714b.png

当需要与Java进行交互时,也可以使用asInstanceOf方法

val objects = Array("a", 1)

val arrayOfObject = objects.asInstanceOf[Array[Object]]

AJavaClass.sendObjects(arrayOfObject)

与Java类似,类型转化可能会抛出ClassCastException异常

b7d4b31ce0b0875eaf87928e08ebcbd0.png

可以使用try/catch来解决此问题

2.2 与Java的.class对应的方法

1. 问题描述

当一个API需要你传递Class对象,在Java中,你可以使用.class,但是在Scala则行不通

2. 解决方案

使用Scala的classOf方法,如下所示

val info = new DataLine.Info(classOf[TargetDataLine], null)

在Java中则使用如下

info = new DataLine.Info(TargetDataLine.class, null);

classOf方法定义在Predef对象中,因此可以在没有import情况直接使用

3. 讨论

该方法可以让你开始学习反射,如下示例可以访问String类的方法

8cbf6ba20dc60300e34dfc50313c18af.png

2.3 确定对象的类

1. 问题描述

在Scala中,你不需要显示的声明类型,你偶尔也想要打印一个对象的类或类型以明白Scala的工作机制

2. 解决方案

你可以使用对象的getClass方法来确定Scala为你自动赋值的类型,如当需要了解可变

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值