51.scala编程思想笔记——浅尝反射
2016-01-02 09:38
309 查看
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比我们这里所展示的功能要强大得多。
欢迎转载,转载请标明出处: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比我们这里所展示的功能要强大得多。
相关文章推荐
- 50.scala编程思想笔记——应用
- 49.scala编程思想笔记——衔接JAVA
- 48.scala编程思想笔记——统一访问方式和setter
- 47.scala编程思想笔记——特征
- 46.scala编程思想笔记——抽象类
- Java并发API:闭锁 CountDownLatch
- 45.scala编程思想笔记——枚举
- 44.scala编程思想笔记——覆盖方法
- 【Java】Java连接sql2008数据库
- matlab图像处理
- 43.scala编程思想笔记——基类初始化
- 42.scala编程思想笔记——继承
- 41.scala编程思想笔记——伴随对象
- 40.scala编程思想笔记——元组
- 39.scala编程思想笔记——自动字符串转换
- 38.scala编程思想笔记——定义操作符
- 好玩的C#
- Java解惑八:很多其它库之谜
- 【JAVA笔记——道】JAVA对象销毁
- C# 字段、属性、成员变量