知识卡片
二元方法难表达
内容
像 connectTo 这种接收同类对象的方法,在Java类型系统中难以严格表达“只能连接同一具体类型”。泛型自类型惯用法能提高安全性,但仍依赖实现者遵守约定。
参考来源
- 位置:《你真的会写代码吗-2021》第9章《请重复利用:可复用性》"二元方法"专栏及"9.2 通用框架"(源文件:_epub-src/OEBPS/Text/0019.xhtml)
- 结论依据:原文明确"像Java和C#这样常见OO语言的类型系统无法表达这样的约束,即给定类或接口的所有子类必须有一个指定形式的二元方法",并说明引入自类型泛型参数T"如果一个类遵守该范式(即将T设置为自己)"才能让connectTo避免向下类型转换,但仍依赖实现者自觉遵守。
- 原始内容:二元方法是类的一个方法,它接收同一个类的另一个对象作为参数,比如水容器的connectTo方法……像Java和C#这样常见OO语言的类型系统无法表达这样的约束,即给定类或接口的所有子类必须有一个指定形式的二元方法……如果一个类遵守该范式(即将T设置为自己),那么它的connectTo方法将不需要执行向下类型转换。