泛型分类——泛型类、泛型方法、泛型接口、泛型高级(通配符)

泛型分类——泛型类、泛型方法、泛型接口、泛型高级(通配符)


1、泛型解决安全问题:

        在Java早期,使用Object类型来接收任意的对象类型。但是在实际的使用中,会有类型转换的问题,即:向上转型没有任何问题,但是向下转型时其实隐含了类型转换的问题,这就是程序不安全的原因,也就是因为存在这种安全隐患,所以Java在JDK5以后就提供了泛型来解决这个安全问题。

2、泛型类

(1)泛型类:把泛型定义在类上。

        格式: public class 类名<泛型类型1, … >

        注意: 泛型类型必须是引用类型。

(2)代码演示

package cn.itcast_04;
/*
 * 泛型类:把泛型定义在类上
 */
public class ObjectTool {
	private T obj;

	public T getObj() {
		return obj;
	}

	public void setObj(T obj) {
		this.obj = obj;
	}
}

*******************************

package cn.itcast_04;

/*
 * 泛型类的测试
 */
public class ObjectToolDemo {
	public static void main(String[] args) {
		ObjectTool ot = new ObjectTool();
		// ot.setObj(new Integer(27)); 				//这个时候编译期间就过不去!
		ot.setObj(new String("林青霞"));
		String s = ot.getObj();
		System.out.println("姓名是:" + s);

		ObjectTool ot2 = new ObjectTool();
		// ot2.setObj(new String("风清扬"));		//这个时候编译期间就过不去!
		ot2.setObj(new Integer(27));
		Integer i = ot2.getObj();
		System.out.println("年龄是:" + i);
	}
}

3、泛型方法

(1)泛型方法:把泛型定义在方法上。

        格式: public  <泛型类型> 返回类型 方法名<泛型类型>

(2)代码演示

/*
 * 泛型方法:把泛型定义在方法上
 */
package cn.itcast_05;

public class ObjectTool {
	public  void show(T t) {
		System.out.println(t);
	}
}

*******************************

package cn.itcast_05;

public class ObjectToolDemo {
	public static void main(String[] args) {

		// 定义泛型方法后
		ObjectTool ot = new ObjectTool();
		ot.show("hello");
		ot.show(100);
		ot.show(true);
	}
}

4、泛型接口

(1)泛型接口:把泛型定义在接口上。

        格式: public  iterface 接口名<泛型类型1, ... , >

(2)代码演示

        A:定义接口

package cn.itcast_06;

/*
 * 泛型接口:把泛型定义在接口上
 */
public interface Inter {
	public abstract void show(T t);
}
       B:定义接口的实现类
package cn.itcast_06;

//实现类在实现接口的时候
//第一种情况:已经知道该是什么类型的了(不常用)

//public class InterImpl implements Inter {
//
//	@Override
//	public void show(String t) {
//		System.out.println(t);
//	}
// }

//第二种情况:还不知道是什么类型的(常用)
public class InterImpl implements Inter {

	@Override
	public void show(T t) {
		System.out.println(t);
	}
}
        C:测试类
package cn.itcast_06;

public class InterDemo {
	public static void main(String[] args) {
		// 第一种情况的测试(不常用)
		// Inter i = new InterImpl();
		// i.show("hello");

		// // 第二种情况的测试(常用)
		Inter i = new InterImpl();
		i.show("hello");

		Inter ii = new InterImpl();
		ii.show(100);
	}
}

5、泛型高级(泛型通配符)

(1)泛型高级(通配符)

        A:        ?                     : 任意类型,如果没有明确,那么就是Object以及任意的Java类了。
        B:        ? extends E     : 向下限定,E只能是    E本身及其子类。
        C:        ? super E        : 向上限定,E只能是    E本身及其父类。

(2)代码演示

package cn.itcast_07;

import java.util.ArrayList;
import java.util.Collection;

/*
 * 泛型高级(通配符)
 * ?:	任意类型,如果没有明确,那么就是Object以及任意的Java类了
 * ? extends E:	向下限定,E只能是E本身及其子类
 * ? super E:	向上限定,E只能是E本身及其父类
 */
public class GenericDemo {
	public static void main(String[] args) {
		// 泛型如果明确的写的时候,前后必须一致
		Collection c1 = new ArrayList();
		// Collection c2 = new ArrayList();	//报错
		// Collection c3 = new ArrayList();	//报错
		// Collection c4 = new ArrayList();	//报错

		// ?	表示任意的类型都是可以的
		Collection c5 = new ArrayList();
		Collection c6 = new ArrayList();
		Collection c7 = new ArrayList();
		Collection c8 = new ArrayList();

		// ? extends E:	向下限定,E只能是E本身及其子类
		// Collection c9 = new ArrayList();	//报错
		Collection c10 = new ArrayList();
		Collection c11 = new ArrayList();
		Collection c12 = new ArrayList();

		// ? super E:	向上限定,E只能是E本身及其父类
		Collection c13 = new ArrayList();
		Collection c14 = new ArrayList();
		// Collection c15 = new ArrayList();	//报错
		// Collection c16 = new ArrayList();	//报错
	}
}

class Animal {
}

class Dog extends Animal {
}

class Cat extends Animal {
} 
  









你可能感兴趣的:(Java语言基础)