泛型:参数化类型,也可以理解为泛指某个类型。可以让方法中的变量暂时不确定类型。
泛型可以在三个位置进行使用:三种方式
在类创建时就声明一个泛型,可以用字母表示(类型形参)
在使用时传入具体类型(类型实参)
泛型接口,同上
泛型方法
1.泛型在类中使用
例如:Person类在创建的时候无法确定类型,但是在使用的时候可以确定,就可以将Person创建为泛型,方法的返回值也会是泛型。
Public class Person<A>{
private String name;
private int age;
private A data;
}
这里的Person类就是泛型在类中的使用,需要在声明类的时候加上”<>”,在括号内填入大写字母代表泛型。生成的getter/setter方法也是使用泛型。
在main方法中使用泛型时,可以使用如下格式创建对象:
Person<String> p = new Person<>();
在方括号中需要填入替代泛型的具体参数类型(类型实参),
在之后p.setData() 对对象p进行方法的调用时,方法需要的参数类型也会随之改变成实参的类型。
2.泛型在接口中使用
泛型接口可以在实现接口的时候指定泛型类型,也可以不指定。
3.泛型在方法中使用
泛型的参数加在权限修饰符后
例如:
public static <A> void print(A a){
System.out.println(a);
}
在main方法中调用print方法的时候会根据输入的参数类型自动装箱。
泛型限定和通配符
泛型限制类型
可以用来限制和指定泛型的区域,必须是某类的子类或者实现类。
例如Plate类必须是Fruit的接口实现类。
通配符
这里的?是通配符
和object不同的是object可以传入任意参数,而?是需要传递的参数来代替这个问号。
?可以当做object来看待,但使用时传入了例如String类型就只能传String了。
泛型的好处
1.提升代码的复用率
2.泛型可以不需要类型的强制转换。