泛型概述
- java泛型是JDK1.5中引入的一个新特性,本质是参数化类型,把类型作为参数传递。
- 常见的形式由泛型类,泛型方法,泛型接口
- 语法:<T…>T称为类型占位符,表示一种引用类型。
- 好处:
- 提高代码的重用性
- 防止类型转换异常,提高代码的安全性。
3)规范类型
泛型的分类
泛型类
在类的后面加泛型,可以使用多个参数.
package genericedemo;
/**
* 定义的泛型类
*/
public class GenericeClass<E,T> {
//属性
private E e;
private T t;
public E getE() {
return e;
}
public void setE(E e) {
this.e = e;
}
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
package genericedemo;
public class TestGenericeClass {
public static void main(String[] args) {
//在使用泛型类的时候,需要确定类型
GenericeClass<String,Integer> gc = new GenericeClass<>();
gc.setE("hello"); //设置字符串类型
System.out.println(gc.getE());//获取赋予字符串类型的值
gc.setT(10); //设置整数类型的值
System.out.println(gc.getT());
}
}
泛型接口
在接口后面加泛型,可以是多个数据类型
package genericedemo;
/**
* @Description:
* 泛型接口
*/
public interface GenericeInterface<E,H> {
void test1();
E test2();
H test3(E e);
}
//实现类,在实现泛型接口的时候,需要确定类型
class GenericeInterfaceImpl implements GenericeInterface<Integer,String>{
@Override
public void test1() {
System.out.println("test1.............");
}
@Override
public Integer test2() {
return 100;
}
@Override
public String test3(Integer integer) {
System.out.println(integer);//10
return "你好";
}
}
package genericedemo;
public class TestGenericeInterface {
public static void main(String[] args) {
GenericeInterface<Integer,String> gif = new GenericeInterfaceImpl();
gif.test1();
Integer i = gif.test2();
System.out.println(i);//100
System.out.println(gif.test3(10));//10
}
}
泛型方法
在方法的前面加泛型,表示泛型方法.
package genericedemo;
/**
* 泛型方法
*/
public class GenericeMethod<G,H> {
public void show1(H h){
System.out.println(h);
}
//返回类型的时候,规定一种类型<类型>
public <A> A show2(A h){
return h;
}
public G show3(G g,H h){
System.out.println(h);//java
return g;//300
}
}
package genericedemo;
public class TestGenericeMethod {
public static void main(String[] args) {
//在创建对象的时候,确定类型
GenericeMethod<Integer,String> gm = new GenericeMethod<>();
gm.show1("hello");
Integer s = gm.show2(100);
System.out.println(s);
Integer i = gm.show3(300, "java");
System.out.println(i);
}
}
泛型限定符
- <?>表示任意的数据类型
- <? extends T>表示T数据类型和它的子类型
- <? super T>表示T数据类型和它的父类型.