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比我们这里所展示的功能要强大得多。
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow