java的泛型

泛型概述

先看下面的代码:

ArrayList al1 = new ArrayList();
	ArrayList al2 = new ArrayList();
	
	al1.add("hello");
	al1.add("world");	
	al1.add("abc");
	al1.add("hello");
	al1.add("1234");
	al1.add("abc");
	al1.add("hello");
	
	for(int i = 0;i<al1.size();i++){
		//获取每一项
		String s = (String)al1.get(i);
		if(!al2.contains(s)){
			al2.add(s);
		}
	}
	for (Object object : al2) {
		System.out.println(object);
	}

 根据集合的用法来存取数据上面看起来很爽的样子  但是如果我们要往集合存取不一样的类型时  往集合里添加数据很方便但是  等到我们取的时候问题很多  会出现不同的类型安全的问题,为了解决这一问题  我们需要限制一个集合只能存取一种类型   这就是我们所说的泛型

虽然上面的例子取的时候可以将数据统一成 string类型 需要强转类型    因为默认从集合中取数据时返回的都是Object类型(类的鼻祖 所有的类型都继承Object类型并且里面包含了一个自动向上转型 即任何的对象都可以赋值给一个Object类型的变量 但是有个缺点是 Object类型的变量不能直接调用子类中独有的方法  可以用向下转型解决)

下面来看使用泛型的代码:

ArrayList<String> al1 = new ArrayList<>();
	ArrayList<String> al2 = new ArrayList<>();
	
	al1.add("hello");
	al1.add("world");	
	al1.add("abc");
	al1.add("hello");
	al1.add("1234");
	al1.add("abc");
	al1.add("hello");
	
	for(int i = 0;i<al1.size();i++){
		//获取每一项
		String s = al1.get(i);
		if(!al2.contains(s)){
			al2.add(s);
		}
	}
	for (String s : al2) {
		System.out.println(s);
	}

 总结:

1.集合默认可以存任意类型的数据,貌似功能十分强大,  存的时候很爽,取得时候问题很多   类型安全问题
2.解决的思路:限制一个集合中只能存一种类型的数据
3.泛型技术就可以限制一个集合中只能存一种类型的数据
4.怎么使用泛型
  ArrayList<String> al=new ArrayList<String>();
5.使用了泛型后,在取数据的时候根本就不需要进行强制
6.泛型技术出现在JDK5
7.在JDK7的时候,推出了一种简化的写法:菱形写法
  ArrayList<String> al=new ArrayList<>();
8.泛型只支持引用数据类型,对于基本数据类型要用他们的包装类
9.所有的集合类都支持泛型

泛型的底层原理

包括泛型方法、泛型类、泛型接口

不管是创建泛型方法还是泛型类还是泛型接口都需要遵循以下三点:

1、声明

2、使用

3、赋值类型

泛型方法:

泛型类

泛型接口:

原文地址:https://www.cnblogs.com/nianzhilian/p/8911565.html