世界上仍有一些人在“普通编码”中不使用jave泛型。我可以相信C ++模板,但是泛型?他们甚至都不难学习/使用。认真地说,Java和C ++的最佳功能分别是泛型和模板。
说服人们做事的最好方法是提出令人信服的论点,保持不威胁和正确。
只要您不做诸如使用模板作为编程语言之类的事情,参数多态性(泛型/模板)几乎肯定是好的。
1.避免代码重复。
这是显而易见的,但是多态代码是通用代码。这就是为什么它被称为泛型。
2.支持更好的静态检查。
没有参数多态性,您最终会写出类似public Object clone()
或public boolean equals(object b)
不仅仅是可憎的东西,它们的类型不提供有关其操作的信息,并且最终会在整个地方抛出异常。参数多态性的替代方法是在各处投射
3.非参数多态性OOP代码基本上无法正确处理“二进制方法”。
您经常使用这些。
4.最佳做法
在Java中,使用泛型被认为是最佳实践(请参阅Josh Bloch的Effective Java)。诸如Sutter和Alexandrescu之类的C ++主要思想家也鼓励使用模板来解决各种问题。
5.它符合OO范式。
人们通常不会注意到这一点,但是子类型和泛型的结合产生了一个系统,它比仅包含一个系统的任何系统都更强大的表现力和面向对象。
考虑Scala的mixin。这是一个很好的功能,可让您将组件中的对象拉在一起。泛型和模板可以模拟其中一些好处。例如,假设您的一个对象使用数据库。好的设计可以使您将数据库访问权限抽象到一个单独的类中。如果操作正确,这不仅使您可以模拟数据存储(可测试性的关键),还意味着您可以添加替代实现,例如新的no-sql数据库。但是,在这里您可能会遇到问题,无论您使用哪种实现方式,都将获得业务对象的不同功能。
泛型抢救!
public class Business<S extends Datastore>{
private S store; ...
}
现在,您可以Business
根据使用数据库特定功能的能力开始静态区分对象。您仍然需要一些运行时检查和强制转换,但是您可以开始构建更好的代码。
和
6.普通代码不存在。
编程领域中只有三件事:
- 图书馆
- 配置,以及
- 错误的代码。
如果您不像代码库那样考虑您的代码,那么当您的项目要求发生变化时,您将面临严重的麻烦。架构(可以说)是设计好的API的艺术。
我觉得这种态度令人震惊。在习惯使用参数化类型进行编程之后,不使用它们只会使一切变得很痛苦。而且,Java和C ++有很多粗糙的地方,它们可以帮助补救。