静态类型检查
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.
鸭子模型实际上创建了一个隐性的接口。
而适配器可以让已经存在或将要创建的类适配到合适的接口上。
这不是鸭子模型,也没有鸭子模型那么方便,但是总算是一种妥协。
网友评论