java - 为什么需要模板/泛型?传承还不够吗?

标签 java c++ templates generics inheritance

我听到很多人说C++ 模板非常强大。我似乎仍然不明白使用它们而不是使用继承的优势。

因为我主要是一名 Java 开发人员,所以我认为泛型模板 是一回事,但根据 Wikipedia :

Although C++ templates, Java generics, and .NET generics are often considered similar, generics only mimic the basic behavior of C++ templates.

我还想知道在可能只使用类的地方使用模板是否不会混淆代码?

最佳答案

模板和继承的作用不同,比较少见 您可以在其中进行选择。一个非常简单的描述应该 是模板为不同的对象提供了一个通用的实现 接口(interface),其中继承为 不同的实现。在他们通常的角色中,模板强制执行 编译时类型系统的不变量;考虑一些 预模板库,其中 Vector 只能包含 Object*, 一切都必须从 Object 派生(而且你必须把东西装箱 像 int)。将一个 int 插入 vector ,并尝试读取一个 double,是一个运行时错误(或者只是未定义的行为),而不是 而不是编译时错误。

我不同意维基百科的引述:从技术上讲,C++ 模板 和 Java 模板几乎无关。 Java 模板的目标是 提供对类型的不变量的编译时强制执行 系统,这也是C++模板的重要用途之一,但是 使用的机制完全无关,C++ 模板可以是 也用于其他目的。

最后,如果您使用的模板只需要一个简单的类 这份工作,你在滥用模板。只是因为 C++ 有模板 并不意味着您应该使每个类和函数都成为模板。

关于java - 为什么需要模板/泛型?传承还不够吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6813548/

相关文章:

java - 无法解决 "local variable needs to be final"

java - CXF-CODEGEN 生成的客户端需要 soap 信封上的命名空间

c++ - 将指向对象的指针传递给 dll

c++ - 指向成员的指针和指向成员函数的指针之间的VC++ 14模板歧义

python - 是否有处理 "...more"的 Django 模板过滤器,当您单击它时,它会显示更多文本?

java - BufferedReader 不显示文件中的正常字符

c++ - C++运行时错误中的字符串

c++ - 从 Josuttis : Do different template functions, 实例化到给定特定类型的相同函数签名,导致 ODR 无效?

templates - 将 hogan.js 与express.js + 虚拟主机结合使用

java - 使用 netbeans 将 ArrayList 加载到 JCombobox 中