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

静态类型检查

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.
鸭子模型实际上创建了一个隐性的接口。
而适配器可以让已经存在或将要创建的类适配到合适的接口上。


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容