[关闭]
@amoszhou 2014-04-28T16:05:27.000000Z 字数 883 阅读 1371

鸭子类型

scala 鸭子类型


1.概念

鸭子类型,其实是一种动态类型的风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定。摘自 维基百科-鸭子类型

2.代码实现

参见我们来看看Scala中鸭子类型如何实现,代码如下:

  1. def withClose(closeAble: { def close(): Unit },
  2. op: { def close(): Unit } => Unit) {
  3. try {
  4. op(closeAble)
  5. } finally {
  6. closeAble.close()
  7. }
  8. }
  9. class Connection {
  10. def close() = println("close Connection")
  11. }
  12. val conn: Connection = new Connection()
  13. withClose(conn, conn =>
  14. println("do something with Connection"))

我们定义了一个withClose的方法,接收2个参数:

接着,我们定义了一个类Connection,给他定义了一个close()方法。最后再调用withClose方法,进行测试。


其实 维基百科-鸭子类型中那个伪代码的例子非常好,用鸭子类型就可以实现多态。感觉可以多看一下,仔细体会一下其中奥妙,我想这些特性也许就是FP最大的魅力!

3.思考

对于Python,Ruby,Lisp这些语言的程序员来说,这也只是一个很正常的特性。不过对于我这种一开始就接触JAVA的coder来说,这种特性还是很另人惊喜。
它避免了显式的去实现接口,省去了定义接口的麻烦,使得整个程序非常灵活。


其实现在的语言都在往这方面靠拢,比如golang,先定义好一个接口,以及方法申明。任何类只要实现了该接口的所有方法,即默认实现了该接口。从而避免掉显式的implemention语法

作为一个scala学习的新手,真是对各种特性、语法应接不暇,7分惊喜3分悲痛啊。scala真是太博大了,作一个集合了面向对象与FP的语言。我只想说,东西太多了,掌握起来好累!

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注