![]() |
1
8
不,绝对不是 总是 错了。
例如,假设在C中有一个事件处理程序,它得到
这只是一个例子——还有很多其他的例子。有时它只是一种绕过稍微笨拙的API的方法,有时它是由于无法在正常类型系统中清晰地表达类型而产生的。例如,您可能有
|
![]() |
2
3
这永远不是一个理想的解决方案,应该尽可能避免——除非选择会更糟。有时,这是无法避免的,例如,前泛型Java的标准API库有很多类(最显著的是集合),它们需要向下转换是有用的。有时,改变设计以避免向下投射会显著地使其复杂化,因此向下投射是更好的解决方案。 |
![]() |
3
1
“合法”下注的一个例子是Java Prime5,当访问它们时,必须将容器元素向下压到它们的具体类型。在那种情况下是不可避免的。这也显示了问题的另一方面:如果在给定的情况下你需要大量的贬低,那么它开始是邪恶的,所以最好在没有贬低的情况下找到另一个解决方案。这导致了Java 5中泛型的引入。 约翰·弗拉西德斯在他的优秀著作中对这个问题(又称“类型清洗”)进行了大量的分析。 Pattern Hatching (实际上是 Design Patterns ) |
|
simply lemon · python上链表的添加方法 10 月前 |
![]() |
HiroIshida · C++多重继承:实现具有重叠虚函数的接口[重复] 11 月前 |
|
Anonymous · 为什么在这个例子中self和类名的用法不同? 11 月前 |
![]() |
P N Singh · 在CPP Oops中调用对象而不创建它 11 月前 |
![]() |
Muthuraj · 如何创建一个通用工厂来创建某种类型的实例[重复] 1 年前 |
![]() |
Andy Votava · 从父类定义调用学生方法 1 年前 |