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

来源:互联网 发布:淘宝云智投软件怎么用 编辑:程序博客网 时间:2024/05/16 00:42

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 0
原创粉丝点击