泛型初认识

数据类型是每一个编程人员都要认真研究的知识,这篇文章就来介绍一下菜鸟了解数据类型的“心酸”历程。

从开始接触编程语言就有了数据类型,诸如integer、string、boolean、time、float、double……,慢慢地有认识了实体类型,还有就是接下来的各种集合类。不管怎么讲他们都是由object类型向下衍生出来的:

背景:

ArrayList是一个使用起来非常方便的集合类,无需进行修改即可用来存储任何引用或值类型,添加到 ArrayList中的任何引用或值类型都将隐式地向上强制转换为 Object。如果项是值类型,则必须在将其添加到列表中时进行装箱操作,在检索时进行取消装箱操作。 强制转换以及装箱和取消装箱操作都会降低性能;在必须对大型集合进行循环访问的情况下,装箱和取消装箱的影响非常明显。

时势造英雄:

就是由于以上数据类型的局限性,造就了泛型这个大英雄,他能够解决其他数据类型无法提供类型参数的问题。

特点:

泛型类( GenericList<T>)不可以像这样使用,因为它实际上并不是一个类型,而更像是一个类型的蓝图。若要使用 GenericList<T>,客户端代码必须通过指定尖括号中的类型参数来声明和实例化构造类型。此特定类的类型参数可以是编译器识别的任何类型。

Demo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        private class ExampleClass { }
        static void Main(string[] args)
        {
            // 声明一个整形数组
            GenericList<int> list1 = new GenericList<int>();
            list1.Add(333);

            // 声明一个字符串数组
            GenericList<string> list2 = new GenericList<string>();
            list2.Add("HelloWorld");

        }
    }
    // 声明一个泛型类
    public class GenericList<T>
    {
       public  void Add(T input) {
            Console.WriteLine("您传入的值是:" + input);
        }
    }

}

这里简单定义了一个泛型类,当我们需要实例化不同类型的对象时,只需要将泛型具体确定下来即可。

效果如下:

由结果可以看出:同一个类,当我们有不同的需要时,改变输入的参数即可实现我们想要的效果。这也就是自己对泛型比较浅显的认识,关于泛型类型参数的约束、泛型类、泛型委托将会在后边的博文章一一介绍,也希望得到大家的关注和指教。

时间: 2024-08-27 17:04:20

泛型初认识的相关文章

泛型初了解

List<T>泛型只是泛型中的一种,很多地方都可以用到泛型,dictionary.list.反射.委托-- 泛型 程序设计语言的一种特性,使得程序员在强类型程序设计语言中可以定义一些可变的部分,这些可变的部分在使用前必须做出指明,泛型实际是具有占位符的类.结构.接口.和方法. 占位符:先占住一个固定的位置,等着你再往里面添加内容的符号 强类型语言:不同类型之间有严格的定义,只有相同的变量才能操作. 弱类型语言:没有明显的类型区别,各个类型之间可以自动的转换. 在三层中师父就要求不可以将D层的传

Java初谈之泛型

/* * * 泛型与c++的模版有异曲同工之妙 * 泛型是面向对象的 * *函数基本使用格式 < T> 返回值 函数名(){} //可以是任意的大写字母不一定非是T *类基本使用格式 class classname<T> {}  以及 class classname<T extend interface & implements>{} * *使用方式和普通类是一样的 采用new的形式 只不过T要有具体的类(不是对象)代替 泛型无外呼泛型方法和泛型类 下面对常见的

数据结构泛型之初接触

1. 设计一个泛型类 Collection,它存储 object 对象的集合(在数组中),以及该集合的当前大小,提供......等方法. import java.util.Arrays; /** * @author 小喵钓鱼 * @date 2020-02-13 12:21 * @veision 1.10 */ public class Collection<E> { private Object[] elementData; // setter public void setElementD

Java 中的泛型详解-Java编程思想

Java中的泛型参考了C++的模板,Java的界限是Java泛型的局限. 2.简单泛型 促成泛型出现最引人注目的一个原因就是为了创造容器类. 首先看一个只能持有单个对象的类,这个类可以明确指定其持有的对象的类型 class Holder1 { private Circle a; public Holder1(Circle a) { this.a = a; } Circle get() { return a; } } 上面的类的可重用性不怎么样,无法持有其他类型的任何对象,下面通过持有Object

Java中的泛型 (上) - 基本概念和原理

本节我们主要来介绍泛型的基本概念和原理 后续章节我们会介绍各种容器类,容器类可以说是日常程序开发中天天用到的,没有容器类,难以想象能开发什么真正有用的程序.而容器类是基于泛型的,不理解泛型,我们就难以深刻理解容器类.那,泛型到底是什么呢? 什么是泛型? 一个简单泛型类 我们通过一个简单的例子来说明泛型类的基本概念.实现原理和好处. 基本概念 我们直接来看代码: public class Pair<T> { T first; T second; public Pair(T first, T se

计算机程序的思维逻辑 (37) - 泛型 (下) - 细节和局限性

35节介绍了泛型的基本概念和原理,上节介绍了泛型中的通配符,本节来介绍泛型中的一些细节和局限性. 这些局限性主要与Java的实现机制有关,Java中,泛型是通过类型擦除来实现的,类型参数在编译时会被替换为Object,运行时Java虚拟机不知道泛型这回事,这带来了很多局限性,其中有的部分是比较容易理解的,有的则是非常违反直觉的. 一项技术,往往只有理解了其局限性,我们才算是真正理解了它,才能更好的应用它. 下面,我们将从以下几个方面来介绍这些细节和局限性: 使用泛型类.方法和接口 定义泛型类.方

.NET 4.0中的泛型协变和反变

随Visual Studio 2010 CTP亮相的C#4和VB10,虽然在支持语言新特性方面走了相当不一样的两条路:C#着重增加后期绑定和与动态语言相容的若干特性,VB10着重简化语言和提高抽象能力:但是两者都增加了一项功能:泛型类型的协变(covariant)和反变(contravariant).许多人对其了解可能仅限于增加的in/out关键字,而对其诸多特性有所不知.下面我们就对此进行一些详细的解释,帮助大家正确使用该特性. 背景知识:协变和反变 很多人可能不不能很好地理解这些来自于物理和

C++primer第十一章 泛型算法

标准库容器定义的操作非常少.标准库没有给容器添加大量的功能函数,而是选择提供一组算法,这些算法大都不依赖特定的容器类型,是“泛型”的,可作用在不同类型的容器和不同类型的元素上. 因为它们实现共同的操作,所以称之为“算法”:而“泛型”指的是它们可以操作在多种容器类型上——不但可作用于 vector 或 list 这些标准库类型,还可用在内置数组类型.甚至其他类型的序列上. 11.1. 概述 假设有一个 int 的 vector 对象,名为 vec,我们想知道其中包含某个特定值.解决这个问题最简单的

Java泛型:泛型的定义(类、接口、对象)、使用、继承

地址   http://blog.csdn.net/lirx_tech/article/details/51570138 1. 设计泛型的初衷: 1) 主要是为了解决Java容器无法记忆元素类型的问题: i. 由于Java设计之初并不知道会往容器中存放什么类型的元素,因此元素类型都设定为Object,这样就什么东西都能放了! ii. 但是这样设计有明显的缺点: a. 取出元素的时候必须进行强制类型转换(尽管集合在运行时里面元素的"运行时类型"不变,即元素的getClass返回的还是最初