鸭子类型

1.概念

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

2.代码实现

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

def withClose(closeAble: { def close(): Unit }, 
    op: { def close(): Unit } => Unit) {
    try {
        op(closeAble)
    } finally {
        closeAble.close()
    }
}

class Connection {
    def close() = println("close Connection")
}

val conn: Connection = new Connection()
withClose(conn, conn =>
    println("do something with Connection"))

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

  • 一个有close方法的类型实例
  • 一个接收这个实例,并且无返回值的函数

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


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

3.思考

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


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

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


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值