|
1
|
| Steve Dunn supercat · 技术社区 · 16 年前 |
|
1
3
这主要是因为您希望在接口上执行一些常见的操作,但是由于接口没有实现,所以我们不能。 另一次,我将创建扩展方法,用于我不拥有的类型,但希望将一系列操作封装到单个方法中。 |
|
2
4
扩展方法对于扩展没有源代码的类非常有用,特别是如果您想扩展一组从特定基派生的类,但又不想创建自己的派生版本来添加新方法。当您要扩展实现一个或多个接口的某些类时,它们也很有用,但不能使它们都派生自基类。我真的不会用它们来做别的。 |
|
|
3
0
一个简单的例子:假设在基础域模型中,您可能有一个学生实体,它封装了所有的核心操作,如注册、参加、推迟等。假设项目中的一个子系统允许学生注册工作通知,并在发布新工作时通过电子邮件通知。像student.registerForJob和student.notifyJobPosting这样的行为并不是真正的核心功能。因此,尽管我拥有学生类代码的完全访问权限,但我不会将这些行为添加到学生核心实体中,因为它可能会打破您的设计边界或原则(例如open/closed或YAGNI),相反,仅在招聘子系统中为学生实体创建这些扩展方法更有意义。 显然,通过继承对Student进行子分类也可以让您实现相同的功能,但是扩展方法显然提供了一种非常灵活的替代方法。从本质上讲,可拓方法是实现装饰设计模式应用的一种方法。更多地了解使用decorator设计模式的动机可能会进一步澄清这些疑问。 |
|
Akira Takeshi · 如何用JavaScript编写扩展方法 2 年前 |
|
|
Aleksandar · 无法调用枚举扩展方法 2 年前 |
|
|
Codebadger · 将泛型传递给扩展方法 8 年前 |
|
|
Otman IGHOULASSEN · 从子类调用基类的扩展方法 8 年前 |
|
|
sirksel · 拳击弦场或扩展Kotlin中所有弦的替代方案? 8 年前 |