泛型定义:泛型其实就是一个待定类型,我们可以使用一个特殊的名字表示泛型,泛型在定义是并不明确是什么类型,而是需要到使用时才会确定对应的泛型类型。
例如 我们的学科成绩输入就可以用到泛型 我们考试课的成绩时具体的数值 int类型,而某些选修课的成绩则需要输入 优良差 来存储。这时使用泛型就十分方便了。
泛型类的创建与使用
我们可以将一个类定义为泛型类。
class Score<T> { //泛型需要使用<>,我们需要在里面添加类型变量
String name ;
String id;
T value; //T会根据使用时提供的类型自动变成对应类型
public Score(String name,String id ,T value){ //这里的T定义的value可以时任何类型输入
this.name=name;
this.id=id;
this.value=value;
}
}
实例
如果能够提前知道输入的是什么类型则在定义的时候用<>来确定泛型的类型
Score<String> score=new Score<>("数据结构", "EP111","优秀");
如果不知道输入的是什么类型的数据, <?> 代表什么类型都可以输入进去。
public class Main{
public static void main(String[] args){
Score<String> score=new Score<>("数据结构", "EP111","优秀");//如果能够提前知道输入的时什么类型则在定义的时候用<>来确定泛型的类型
Score<Integer> s=new Score<>("英语","EP110",80);//如果能够提前知道输入的时什么类型则在定义的时候用<>来确定泛型的类型
Score<?> ss=new Score<>("Java课程","EP123",78.6);
System.out.println(s.getValue());
System.out.println(score.getValue());
System.out.println(ss.getValue());
}
}
class Score<T> { //泛型需要使用<>,我们需要在里面添加类型变量
String name ;
String id;
T value; //T会根据使用时提供的类型自动变成对应类型
public Score(String name,String id ,T value){ //这里的T定义的value可以时任何类型输入
this.name=name;
this.id=id;
this.value=value;
}
public T getValue(){
return value;
}
}
类中也可以定义多中泛型数据,只需要用逗号隔开就行 。
public class Main{
public static void main(String[] args){
Test<String,Integer,Character> test =new Test<>();
test.a="lbwnb";
test.b=10;
test.c='童';
}
}
class Test<A,B,C> {
A a;
B b;
C c;
}
泛型也可以定义数组。
public class Main{
public static void main(String[] args){
Test<int[]> test=new Test<>();
test.values= new int[]{1, 2, 3, 4,};
Test<double[]> test1=new Test<>();
test1.values=new double[]{1.2,0.3};
}
}
class Test<T> {
String name;
T values;
}
注意:泛型不能定义构造方法,并且由static 定义的静态内容,和方法也是不能使用泛型的。
泛型不支持基本类型,要使用对应的包装类。
八种基本类型及对应的包装类。
不只是类,其实接口,抽象都可以支持泛型。