zoukankan      html  css  js  c++  java
  • 1.为什么要用泛型

    泛型程序设计(Generic programming) 意味着编写的代码可以被很多不同类型的对象所重用

    在增加泛型类之前,ArrayList类只维护一个Object引用的数组:

    public class ArrayList {
    	private Object[] elementData;
    	...
    	public Object get(int i) {...}
    	public void add(Object o) {...}
    }
    

    而这会产生两个问题:

    【1】获取一个值时必须进行强制类型转换:

    	ArrayList files = new ArrayList();
    	// 输入后将以Object的形式保存
    	files.add("e://fatmanhappycoding.txt");
    	// 将获取到的Object转化成String
    	String filename = (String)files.get(0);
    

    【2】没有错误检查,可以向数组列表添加任何类的对象

    往本来应该存放String的files中加入文件对象

    files.add(new File("..."));
    

    这么做在编译和运行都不会出错
    但是在使用时我看不出来这个files到底是存放了String类型的对象还是File还是其他的什么对象,所以在使用时很可能会对存放了File类型对象的files执行:

    String filename = (String)files.get(1); // 里面存放了File对象
    

    此时就会产生错误
    所以,泛型提供了一个解决方案:类型参数

    ArrayList<String> files = new ArrayList<String>();
    

    这样提高了可读性,使我们一看就知道里面存放了String对象

    在Java SE 7后我们可以这样写: ArrayList< String>files = new ArrayList<>();

    例:

     public class ArrayList<T> {
    	 private T[] elementData;
    	 ...
    	 public T get(int i) {...}
    	 public void add(T t) {...}
    }
    

    使用上面例子中采用泛型的ArrayList:

    ArrayList<String> files = new ArrayList<>();
    String filename = files.get(0);
    

    此时不用进行转换,编译器通过get方法的类型参数便知道了这是String型的,add也同理,因此,现在用add来向files添加File类型的对象则会报错

    因此,泛型使得程序有更好的可读性和安全性

    注:本文为《Java 核心技术 卷I》读书笔记及个人理解解释

  • 相关阅读:
    Leetcode 122. 买卖股票的最佳时机 II
    Leetcode 121. 买卖股票的最佳时机
    Leetcode 205. 同构字符串
    Leetcode 875. 爱吃香蕉的珂珂
    Leetcode 921. 使括号有效的最少添加
    Leetcode 238. 除自身以外数组的乘积
    评论设置----第二章:创建和管理内容
    其它内容选项----第二章:创建和管理内容
    预览和全展示----第二章:创建和管理内容
    Drupal的主题----第一章:Drupal的介绍
  • 原文地址:https://www.cnblogs.com/fatmanhappycode/p/12231216.html
Copyright © 2011-2022 走看看