知识卡片

泛型是否真正基于能力判断决定它给出多大自由度

普通读书笔记卡 · 1816.c

内容

语言支持鸭子类型的方式会决定它到底带来多大自由度。C++模板允许任意提供了所需操作的类型直接通过编译期检查,不要求继承任何特定的基类;而某些语言的泛型表面上语法相似,实际会把类型信息在运行时抹掉、只留下最基础的公共方法,逼得程序员回头去显式声明一个共同接口才能用上想要的操作。同样叫泛型或鸭子类型,只有真正基于具备哪些能力来判断的实现,才对不相关的类型给出了自由互换的余地。

参考来源

- 位置:《架构之美》第14章《重读经典》14.2节《类型是隐式定义的》(源文件:程序之美系列套装(6册)团队之美、项目管理之美、架构之美、数据之美、测试之美、安全之美/_epub-src/OEBPS/Text/part0278.xhtml) - 结论依据:原文对比了C++模板"这些类型可以是原生类型,也可以是用户定义的类型。没有限制它一定要继承自某个特定的类",与Java泛型"泛型类型被悄悄转换成了Object的实例(这叫做擦除)……我们必须……通过Speak接口来定义一个类型……这在很大程度上减少了泛型的好处"。 - 原始内容:我们在main()方法中可以看到,函数:max适用于实现了比较操作符的所有类型……没有限制它一定要继承自某个特定的类……令人困惑的是……在Java中,泛型类型被悄悄转换成了Object的实例(这叫做擦除)……但是这在很大程度上减少了泛型的好处,因为我们要通过Speak接口来定义一个类型。