zoukankan      html  css  js  c++  java
  • Atitit 泛型原理与理解attilax总结

    Atitit 泛型原理与理解attilax总结

    1. 泛型历史1
    1.1.1. 由来1
    1.2. 为什么需要泛型,类型安全2
    1.3. 7.泛型的好处2
    2. 泛型的机制编辑2
    2.1.1. 机制3
    2.1.2. 编译机制3
    2.2. 参考3


    1.泛型历史
    泛型编程(Generic Programming)最初提出时的动机很简单直接:发明一种语言机制,能够帮助实现一个通用的标准容器库。所谓通用的标准容器库,就是要能够做到,比如用一个List类存放所有可能类型的对象这样的事;泛型编程让你编写完全一般化并可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同。泛型即是指具有在多种数据类型上皆可操作的含意,与模板有些相似。STL巨大,而且可以扩充,它包含很多计算机基本算法和数据结构,而且将算法与数据结构完全分离,其中算法是泛型的,不与任何特定数据结构或对象类型系在一起。


    1.1.1.由来
    泛型编程最初诞生于C++中,由Alexander Stepanov[2]和David Musser[3]创立。目的是为了实现C++的STL(标准模板库)。其语言支持机制就是模板(Templates)。模板的精神其实很简单:参数化类型。换句话说,把一个原本特定于某个类型的算法或类当中的类型信息抽掉,抽出来做成模板参数T。比如qsort泛化之后就变成了:






    1.2.为什么需要泛型,类型安全


    由于忘记了之前在list中也加入了Integer类型的值或其他原因,运行时会出现java.lang.ClassCastException异常。为了解决这个问题,泛型应运而生


    2.泛型的使用
    Java泛型编程是JDK1.5版本后引入的。泛型让编程人员能够使用类型抽象,通常用于集合里面。
    1.3.7.泛型的好处
    (1)类型安全。
    通过知道使用泛型定义的变量的类型限制,编译器可以更有效地提高Java程序的类型安全。
    (2)消除强制类型转换。
    消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。所有的强制转换都是自动和隐式的。
    (3)提高性能。
    2.泛型的机制编辑
    2.1.1.机制
    C#泛型代码在被编译为IL代码和无数据时,采用特殊的占位符来表示泛型类型,并用专有的IL指令支持泛型操作。而真正的泛型实例化工作以"on-demand"的方式,发生在JIT编译时。
    2.1.2.编译机制
    1. 第一轮编译时,编译器只为Stack<T>(栈算法)类型产生“泛型版”的IL代码与元数据-----并不进行泛型类型的实例化,T在中间只充当占位符
    2. JIT编译时,当JIT编译器第一次遇到Stack<int>时,将用int替换“泛型版”IL代码与元数据中的T---进行泛型类型的实例化。CLR为所有类型参数为“引用类型”的泛型类型产生同一份代码;但如果类型参数为“值类型”,对每一个不同的“值类型”,CLR将为其产生一份独立的代码。
    2.2.参考
    Java技术----Java泛型详解 - 极客头条 - CSDN.NET.html
    Atitit.java 与c#的泛型实现对比.doc
    Atitit.泛型类  静态方法 使用引用泛型类型参数.doc
    atitit.泛型编程总结最佳实践 vO99 java c++ c#.net php
    paip.使用泛型时未能找到类型或命名空间名称“T.txt
    paip.泛型 针对泛型创建默认对象.txt
    paip.自定义java 泛型类与泛型方法的实现总结.txt


    作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 
    汉字名:艾提拉(艾龙),   EMAIL:1466519819@qq.com
    转载请注明来源: http://www.cnblogs.com/attilax/
    Atiend

  • 相关阅读:
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 15—Anomaly Detection异常检测
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 14—Dimensionality Reduction 降维
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 13—Clustering 聚类
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 12—Support Vector Machines 支持向量机
    【原】机器学习公开课 目录(课程笔记、测验习题答案、编程作业源码)...持续更新...
    【原】Coursera—Andrew Ng机器学习—Week 11 习题—Photo OCR
    【原】Coursera—Andrew Ng机器学习—Week 10 习题—大规模机器学习
    【原】Coursera—Andrew Ng机器学习—Week 9 习题—异常检测
    【原】Coursera—Andrew Ng机器学习—Week 8 习题—聚类 和 降维
    【原】Coursera—Andrew Ng机器学习—Week 7 习题—支持向量机SVM
  • 原文地址:https://www.cnblogs.com/attilax/p/6080509.html
Copyright © 2011-2022 走看看