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》读书笔记及个人理解解释

  • 相关阅读:
    Vim学习指南
    frambuffer lcd.c
    工控显示界面
    ubuntu nfs 开发板
    java初学1
    使用多态来实现数据库之间的切换
    Space Shooter 太空射击
    CandyCrush 糖果传奇
    进制转换以及原码、反码、补码
    winform小知识
  • 原文地址:https://www.cnblogs.com/fatmanhappycode/p/12231216.html
Copyright © 2011-2022 走看看