您的位置:首页 > 编程语言 > Java开发

Java泛型的理解和用法

2016-03-14 15:38 549 查看
泛型的由来:

在java开发中,泛型和集合框架结合起来创建对象会比较的常用。泛型是指参数化类型的能力,它可以定义类,方法,接口等。随后在编译的过程中,由编译器自动的转换成具体的类型替换它。
之所以使用泛型是因为早期的泛型是Object来使用得,但是在实际的使用时,在类型的转换上存在隐患。比如我们定义了一个Object,实例的时候将它转换成String,但是在接收的时候我们又接受为int型,这样在程序的代码片中是不会报错的,但是在执行的过程中就会报错。所以java提供泛型来解决安全问题。


泛型的使用:

1.定义泛型类

public class Toll<E>{

}


2.定义泛型类中泛型方法

public class Toll<E>{

private E e;

public E getE(){
return e;
}

public void setE(E e){
this.e = e;
}
}


这里的泛型类中的泛型必须和类定义的泛型保持一致,如果不一致则需要在方法中定义自己泛型

public<T> void show(T t){
System.out.println(t);
}


3.泛型接口的使用

interface Inter<T>{
public void show(T t);
}


4.泛型通配符?

非受限统配类型 ?表示任何一种对象类型 ,等价于? extends Object。

受限通配类型 ? extends T ,表示T或T的一个未知子类型。

下限通配 ?super T,表示T或T的一个父类型。

利用泛型自定义栈

/**
1.
2. @author hp
3. 创建一个空栈
4. @param <E>
*/
public class GenericStack<E> {
private ArrayList<E> list = new ArrayList<>();
public GenericStack() {
}
/*
* 栈的元素个数
*/
public int getSize(){
return list.size();
}
/*
* 返回栈顶元素
*/
public E peek(){
return list.get(getSize()-1);
}
/*
* 向栈的顶端添加一个元素
*/
public void push(E o){
list.add(o);
}
/*
* 弹出栈顶元素并删除这个元素
*/
public E pop(){
E o = list.get(getSize()-1);
list.remove(getSize()-1);
return o;
}
public boolean isEmpty(){
return list.isEmpty();
}
}


注:!!!

泛型不能使用new E(),不能使用泛型类型参数创建对象。

不能使用new E[],不能使用泛型创建数组

在静态方法中不允许类的参数是泛型类型

异常类不能是泛型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: