Java 泛型总结

一,泛型的由来:

早期的Object类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换的问题。也就存在这隐患,所以Java提供了泛型来解决这个安全问题。

二,泛型概述

泛型,即“参数化类型”;顾名思义,就是将类型由原来的具体的类型(引用数据类型)参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。

三,泛型使用注意事项:

<>中放的必须是引用数据类型 

前后的泛型必须一致,或者后面的泛型可以省略不写(1.7的新特性菱形泛型) 

例如:ArrayList<String> list = new ArrayList(); 如果后面的也写上那就必须前后一致:ArrayList<String> list= new ArrayList<String>();

四,泛型好处

提高安全性(将运行期的错误转换到编译期) 

//这段代码在编译器不会报错,但是在运行期间会抛ClassCastException;
public static void main(String[] args) {
        List list = new ArrayList();
        list.add("abc");
        list.add(true);
        list.add(1233);

        for (int i =0; i<list.size();i++) {
            String s = (String) list.get(i);
            System.out.println(s);
        }
    }

省去强转的麻烦

五,泛型基本使用

5.1,泛型的概述及使用

泛型类概述<T>
    把泛型定义在类上

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

注意事项    
     泛型类型必须是引用类型

简单的泛型类

public class Tool<E> {//此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型
	
	private E key;

	public E getKey() {
		return key;
	}

	public void setKey(E key) {
		this.key = key;
	}
}

5.2,泛型方法的概述和使用

泛型方法概述
     把泛型定义在方法上

 定义格式    
     public <泛型类型> 返回类型 方法名(泛型类型 变量名)

 非静态泛型方法的使用


public class Tool<E> {//此处E可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型
	
	private E key;

	public E getKey() {
		return key;
	}

	public void setKey(E key) {
		this.key = key;
	}

        //泛型方法 类泛型使用的是E 泛型方法使用的是T
        public<T> void show(T t) {				//方法泛型最好与类的泛型一致
		System.out.println(t);				//如果不一致,需要在方法上声明该泛型
	}
}

静态泛型方法的使用

public class Tool<E> {//此处E可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型
	
	private E key;

	public E getKey() {
		return key;
	}

	public void setKey(E key) {
		this.key = key;
	}

        //泛型方法 类泛型使用的是E 泛型方法使用的是T
        public<T> void show(T t) {				//方法泛型最好与类的泛型一致
		System.out.println(t);				//如果不一致,需要在方法上声明该泛型
	}


         public static<W> void print(W w) {		//静态方法必须声明自己的泛型
		System.out.println(w);
	}
	
}

5.3,泛型接口的概述和使用

泛型接口概述
     把泛型定义在接口上

定义格式    
    public interface 接口名<泛型类型>

泛型接口的使用

//泛型接口
interface Inter<T> {
	public void show(T t);
}



//泛型接口的使用1
class Demo implements Inter<String> {		//推荐用这种

	@Override
	public void show(String t) {
		System.out.println(t);
	}
	
}


//泛型接口的使用2
class Demo<T> implements Inter<T> {			//没有必要在实现接口的时候给自己类加泛型

	@Override
	public void show(T t) {
		System.out.println(t);
	}
	
}

5.4,泛型高级之通配符

 泛型通配符<?>
     任意类型,如果没有明确,那么就是Object以及任意的Java类了

 ? extends E
     向下限定,E及其子类

 ? super E
    向上限定,E及其父类


好文章分享

https://www.cnblogs.com/dengchengchao/p/9717097.html

发布了93 篇原创文章 · 获赞 50 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/ezconn/article/details/94364278