提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
Java泛型- 泛型的简介
- 泛型类
- 泛型类的定义
- 为泛型申请空间
- 在泛型类外部得到泛型内部的数据
- 泛型类的使用。
- 泛型接口
- 泛型接口的定义
- 泛型接口的使用
我们什么要使用泛型,使用泛型有什么好出,这是我们在介绍泛型之前需要思考的一个问题?
我们在定义栈这个类的时候,一般都是定义int类型的栈,那在这个栈类中只能存储int类型的数据,如果我想存储float类型的数据就只能重新定义一个float类型的栈,要存储char类型的数据也只能在重新定义一个cahr类型的栈。在这些重新定义的栈中,其实基本的操作都是一样的,只是里面的数据类型不一样,那有没有什么办法,可以让我们只定义栈,而类型在之后可以根据我们的需要来确定栈的类型。对于上面方法的实现就是java中的泛型。
使用泛型,我们可以达到一劳永逸的效果。
我们先看一下泛型和普通类之间的区别
//普通类
public class stack{}
//使用泛型的类
public class stack{}
从上面的代码中我们可以看到泛型类和普通类之间的区别就算在泛型类中有一个 “< T >”,而这个"< T >"就是可以用来定义泛型中的类型,就是我们在上面所说的栈的类型。
知道了泛型与普通类之间的别,那我们就可以对泛型进行使用,其实泛型就是一个类型,这个类型可是定义的一个类,也可以使一个具体的类型,如Integer,char等
public class Stack{ private T []data;//储存空间 private int top;//栈顶指针 private int maxsize;//最大容量 }
可以将泛型T和int,char等类型一样进行使用。
为泛型申请空间但是需要注意的是在使用泛型申请空间的时候需要注意,因为在java中使用new方法进行申请空间的时候需要具体的空间类型的大小,而泛型T是一个位置的类型,在申请空间的时候我们可以使用所有类的父类Object来申请空间,之后在使用泛型T类型进行转换,可参考如下代码。
public class Stack{ private T []data;//储存空间 private int top;//栈顶指针 private int maxsize;//最大容量 public Stack(int maxsize) { this.maxsize = maxsize; data = (T[])new Object[maxsize]; top = 0;//栈顶指针指向即将要存储的元素 } }
其中为data数组进行空间申请的时候,new后面使用的Object类型,这样的操作是被允许的,之后我们使用类型转换,将他转换我我们需要的类型T就可以了。
在泛型类外部得到泛型内部的数据因为泛型的类型只有在泛型类中才知道,如果在外部中直接使用使用不被允许的。我们可以采用如下类似的方式得到泛型中的数据。
public T getData(int i){
return data[i];
}
我们可以可以在泛型类里面定义一个方法,并将其返回的类型为T。这样我们就可以在泛型类的外部得到泛型内部的数据并将进行使用。
泛型类的使用。在定义了泛型类之后,可以对定义的泛型类进行调用:
public static void main{
//对泛型类进应用
Stack stack = new Stack<>(10);/*要在定义的<>里面给定泛型的类型。
}
我们要在使用泛型的时候泛型类名的后面< >的位置给泛型的类型赋值,这个可以是我们一直的一些类型,如Integer、char。
泛型接口 泛型接口的定义可以定义泛型的类,同样也可以定义泛型的接口。与定义泛型类的方式相似,也是在接口名后添加< T >:
public interface Addition{ public T add(T node);//接口中只有方法,而不给予实现。 }
接口中的方法也可以使用定义的泛型
泛型接口的使用在使用泛型接口的时候,需要在接口名后面添加< >类型,具体如下:
public class Circle implements Addition{ }
这样就给接口里面的泛型赋予了类型。



