zoukankan      html  css  js  c++  java
  • 泛型小解析

    先来看看《Java编程思想》一书里面对于泛型的初衷和作用的解析:



    作用1(针对C++):当我们编写了一个很强大的函数,希望拿去使用(通过参数传递进来)时,发现这个函数只能传递一个特定类型的参数比如int类型的,那么对于其他类型的数据就无法使用这个“强大”的函数了,是不是很苦逼,举个例子,int max(int a, int b)函数,我们姑且当它是一个很“强大”的函数,是用来计算传进来的两个参数谁的值最大,但是目前的函数写法就导致只能用于计算两个int整型数据的大小,而不能用于double等等这些类型了,所以需要用到泛型,把函数改写成(C++写法):

    template <typename T>
    T max(T a, T b){}

    这样就达到了将这个函数拓展到多种数据类型的目的了。

    作用2(C++/Java):就是上图所说的作用:创造容器类,举个例子,有一个罐子(容器),我们拿它来装东西的,如果我们在罐子贴一张标签说“此罐子只能装水”,限制它就只能装水(某一具体类型),那这个罐子的公用就小很多了,如果我们还想装酸菜(另一类型),还得去重新拿一个标明“用来装酸菜”的罐子,是不是很麻烦。所以解决办法就是泛型,罐子啥都不贴或者贴张标签说“此罐子啥都能装,只要我能装进去的”,那么我们就可以往这个罐子(容器)里塞我们想要塞的任何东西了。

    代码示例:

    /**
     * Holder.java
     * @author 吕浪
     * @My Email:784975698@qq.com
     * @Created on 2016年8月7日
     */
    package com;
    
    public class Holder<T>
    {
    	private T a;
    	public Holder(T a)
    	{
    		this.a = a;
    	}
    	public void set(T a)
    	{
    		this.a = a;
    	}
    	public T get()
    	{
    		return a;
    	}
    	
    	public static void main(String[] args) {
    		Holder<Integer> h = new Holder<Integer>(6);
    		System.out.println(h.get());
    		h.set(7);
    		System.out.println(h.get());
    	}
    
    }
    

    运行结果:

    6

    7


    这里的Holder类相当于一个容器,它用来干什么的捏,只是用来存放一个T类型的对象,即对象容器,使用泛型,那么就可以使Holder能够容纳任意类型的对象进来。也就很好得实现了该类的代码复用。又回到之前说过的一点了,Java语言中,很多设计例如这里的泛型还有其他如内部类或继承等等,经常是为了达到这样一个目的:代码复用。或者说得不那么片面来说,就是为了更好(包括少出差错)、更快地编程,以及使程序运行效率更高(C++比java更强调这点),Java比C++更强调前两点,所以有时候java牺牲了程序运行的效率去使程序员更好地编程。为啥牺牲程序效率也要让编程者更舒服?我想这是因为我们每个是人,都有自己的人生,编程终究只是编程,它并不是人生的所有,所以如果能让人以更快地速度去完成同样质量的代码,何乐而不为呢?虽然对于技术狂来说牺牲运行效率是不可容忍的。最后又回到那句话:“编程只是工具,所不同的是你用它来实现的是自己的人生,还是别人的人生。”

  • 相关阅读:
    virtualbox 设置鼠标在虚拟机和电脑之间切换
    7-nginx 配置记录 http 请求参数(如记录URL参数)的 log 和 nginx 常见的一些内置变量
    BufferedWriter 没有比FileWriter 快多少
    锁、线程锁、锁旗标、锁对象
    all 2 branches missed
    使用xmp path进行行变列的SQL语句
    程序员的健身课
    zookeeper启动报错:Error: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain
    clickhouse数仓:mysql数据到clickhouse的离线、实时与全量、增量的方案调研
    sql语句分为三类(DML,DDL,DCL)
  • 原文地址:https://www.cnblogs.com/lvlang/p/10586420.html
Copyright © 2011-2022 走看看