51.scala编程思想笔记——浅尝反射

51.scala编程思想笔记——浅尝反射

欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50447603
源码下载连接请见第一篇笔记。

反射表示拿起一个对象并将其放在镜子前面,这样它就可以发现自身的奥秘。

         例如trait会自动 将一个toString方法添加到任何类中,如下:

object EchoArgs2 {

  defmain(args:Array[String]) =

    for(arg<- args)

     println(arg)

}

[root@OEL examples]# cat Name.scala

// Name.scala

package com.atomicscala

import reflect.runtime.currentMirror

 

object Name {

  defclassName(o:Any) =

   currentMirror.reflect(o).symbol.

   toString.replace('$', ' ').

    split('').last

}

 

trait Name {

  override deftoString =

   Name.className(this)

}

其中className方法接受一个Any对象,并产生该对象的类名。

任何与Name特征结合的类都会自动包含一个知晓该类自身名字的toString方法。通过将this关键字传递给className, 实现了当前对象的传递。

         然后调用,使用如下代码:

import com.atomicscala.AtomicTest._

import com.atomicscala.Name

 

class Solid extends Name

val s = new Solid

s is "Solid"

 

class Solid2(val size:Int) extends Name {

  override deftoString =

   s"${super.toString}($size)"

}

val s2 = new Solid2(47)

s2 is "Solid2(47)"

         Scala的反射API比我们这里所展示的功能要强大得多。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值