相关疑难解决方法(0)

继承与聚合

关于如何在面向对象的系统中最好地扩展,增强和重用代码,有两种思路:

  1. 继承:通过创建子类来扩展类的功能.覆盖子类中的超类成员以提供新功能.当超类想要一个特定的接口但是对它的实现不可知时,使方法抽象/虚拟以强制子类"填空".

  2. 聚合:通过获取其他类并将它们组合到一个新类中来创建新功能.为这个新类附加一个公共接口,以便与其他代码进行互操作.

每个的好处,成本和后果是什么?还有其他选择吗?

我看到这个辩论定期出现,但我认为它还没有被问到Stack Overflow(虽然有一些相关的讨论).谷歌的结果也令人惊讶地缺乏.

language-agnostic oop inheritance aggregation

143
推荐指数
6
解决办法
8万
查看次数

奇怪的泛型错误

我正在尝试使用泛型实现以下结构.得到一个奇怪的编译器错误,无法弄清楚原因.

class Translator<T:Hashable> {...}

class FooTranslator<String>:Translator<String> {...}
Run Code Online (Sandbox Code Playgroud)

这个想法是Translator使用T作为字典中键的类型.这可以是例如String或枚举.子类提供具体的字典.

但它失败的原因是:"类型'字符串'不符合协议'Hashable'"

但String符合Hashable!我疯了吗?它也不适用于Int,它也符合Hashable.如果我将Hashable替换为Equatable也不起作用,这也应该由两者实现.

If I remove the type constraint, just for testing (where I also have to disable the dictionary, as I can't use anything not hashable as key there) - it compiles

class Translator<T> {...}

class FooTranslator<String>:Translator<String> {...}
Run Code Online (Sandbox Code Playgroud)

What am I doing wrong?

generics swift

28
推荐指数
2
解决办法
2099
查看次数