Android开发经验谈Web前端之路Android技术知识

《java编程思想 泛型》鸭子类型

2017-08-13  本文已影响155人  每天学点编程

静态类型检查

java泛型的缺点

java泛型是通过擦除实现的,导致只能调用Object类的方法,如果需要调用其他的方法,需要设置泛型的边界。

鸭子类型的概念

"If it walks like a duck and talks like a duck, you might as well treat it like a duck."

鸭子模型只要求一组方法被实现,不要求实现特定的类和接口。

鸭子模型是代码组织和重用的机制。

支持鸭子类型的语言

动态语言:Python
静态语言:C++

支持鸭子类型的语言——Python

Python是在运行时检查。

支持鸭子类型的语言——C++

C++是在编译期检查的。
C++是通过参数类型支持鸭子模型。

Java无法实现鸭子类型

上面的例子是用泛型实现的,但是跟使用接口实现的效果差不多:

可以看出,泛型其实不是必须的,因为类已经被强制要求实现Performs接口。

使用反射实现鸭子类型


使用反射的方式实现鸭子类型,会把类型检查推迟到运行时。

使用反射实现鸭子类型例子二

使用适配器实现鸭子模型

In effect, latent typing creates an implicit interface containing the desired methods.
鸭子模型实际上创建了一个隐性的接口。
而适配器可以让已经存在或将要创建的类适配到合适的接口上。


这不是鸭子模型,也没有鸭子模型那么方便,但是总算是一种妥协。

上一篇 下一篇

猜你喜欢

热点阅读