——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
泛型是JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制。
好处:1、将运行时期出现的问题转移到编译时期,方便于程序员解决问 题,让运行事情问题减少,安全。
2、避免了强制转换麻烦。
格式:通过< >来定义要操作的引用数据类型。在集合框架很常见。
如下面:
import java.util.*;
public class FanXingTest {
public static void main(String[] args){
ArrayList<Integer> al=new ArrayList<Integer>();
al.add(12);
al.add(15);
al.add(20);
Iterator it=al.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
泛型类:当类中要操作的引用数据类型不确定的时候。
泛型类定义的泛型,在整个类中有效,如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。
为了让不同方法可以操作不同类型,而且类型还不确定,那么可以将泛型定义在方法上。
import java.util.*;
public class FanXingTest4 {
public static void main(String[] args){
Methoc<Integer> m=new Methoc<Integer>();
m.show(123);
//m.show("asdf"); //这里是错误的,因为show可以传递的参数类型已经固定了,只能是整形
m.print("asdf"); //print方法上定义了泛型,所以它不爱限制
m.say("bbb");
}
}
class Methoc<AA>{
public void show(AA q){
System.out.println(q);
}
public <QQ> void print(QQ q){
System.out.println(q);
}
public static <BB> void say(BB b){ //say方法是静态的,所以它不可以访问类上定义的泛型,必须将泛型定义在方法上
System.out.println(b);
}
}
泛型也可以定义在接口上。
如:
import java.util.*;
public class FanXingTest5 {
public static void main(String[] args){
Test1 t=new Test1();
t.say("ads");
//t.say(123); //错误,只能传递String 类型
}
}
interface jiekou<QQ>{
public void say(QQ q);
}
class Test1 implements jiekou<String>{
public void say(String q){
System.out.println(q);
}
}
但如果类操作的类型也不确定,可以这样:
import java.util.*;
public class FanXingTest5 {
public static void main(String[] args){
Test1<Integer> t=new Test1<Integer>();
t.say(123);
}
}
interface jiekou<QQ>{
public void say(QQ q);
}
class Test1 <QQ> implements jiekou<QQ>{
public void say(QQ q){
System.out.println(q);
}
}
泛型限定:
? extends E 泛型可以接收E,也可以接收E的子类型;
? super T 泛型可以接收T,也可以接收T的父类型。
import java.util.*;
public class TongPeiFu2 {
public static void main(String[] args){
ArrayList<Persona> a=new ArrayList<Persona>();
a.add(new Persona("ads",23));
a.add(new Persona("sss",11));
a.add(new Persona("oui",62));
ArrayList<Studenta> a2=new ArrayList<Studenta>();
a2.add(new Studenta("人有有",23));
a2.add(new Studenta("小丽",11));
a2.add(new Studenta("方方",62));
show(a);
show(a2);
}
public static void show(ArrayList<? extends Persona> a){
Iterator it=a.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
class Persona{
String name;
int age;
Persona(String name, int age){
this.name=name;
this.age=age;
}
public String toString(){
return this.name;
}
}
class Studenta extends Persona{
Studenta(String name,int age){
super(name,age);
}
}