zoukankan      html  css  js  c++  java
  • Java的Generics和c++的Template到底有什么不同?

    先了解Java的Generics:
    根据Java的文档,Java引入Generics一是为了在编译时提供更强的类型检查,二是为了泛型编程。

    编译时,Java靠type erasure来实现Generics:

    1. 将所有的泛型参数替换为限定(bound这里如何翻译?)的类型,如果没有限定,就替换为Object类。因此然生的字节码和普通的类文件一样;
    2. 为了保证类型安全,必要的时候会是使用cast;
    3. 为了维护继承的泛型类型之间的多态的正确性,必要的时候会生成bridge methods。

    考虑下面的泛型类,这个类代表单链表的节点。(一下例子均出自java doc)

    Java代码 复制代码 收藏代码
    1. public class Node<T> {
    2. private T data;
    3. private Node<T> next;
    4. public Node(T data, Node<T> next) }
    5. this.data = data;
    6. this.next = next;
    7. }
    8. public T getData() { return data; }
    9. // ...
    10. }


    因为T没有被限定,所以Java编译器将其替换为Object:

    Java代码 复制代码 收藏代码
    1. public class Node {
    2. private Object data;
    3. private Node next;
    4. public Node(Object data, Node next) {
    5. this.data = data;
    6. this.next = next;
    7. }
    8. public Object getData() { return data; }
    9. // ...
    10. }


  • 相关阅读:
    Oracle11g 审计介绍
    用Go向MySQL导入.csv文件
    【Lucene】实现全文索引
    redis-3.0.1 sentinel 主从高可用 详细配置
    MySQL性能优化之max_connections配置
    数据结构算法
    inux 软件编译、安装、删除
    2015年,才开始流行的几个教育观念
    常见的几种语言函数调用约定
    关于代码调试de那些事
  • 原文地址:https://www.cnblogs.com/bjanzhuo/p/3575985.html
Copyright © 2011-2022 走看看