-
概念:泛型就是参数化类型,使用广泛的类型。
-
起因:数据类型不明确:
1.装入数据的类型都被当做Object对待,从而“丢失”自己的实际类型。
2.获取数据时往往需要转型,效率低,容易产生错误。 -
作用:
1.安全:在编译的时候检查类安全
2.省心:所有强制转换都是自动和隐式的,提高代码的重用率。 -
泛型类:定义类时使用泛型
1)。格式<>
class类名<字母列表>{
修饰 字母 属性;
修饰 构造器(字母){
}
修饰 返回类型 方法(字母){
}
} -
泛型常见字母
-T:type表示类型
-K V :是键值中的key,value
-E :代表elemnt
-? :表示不确定的认意类型。 -
不能使用在静态属性、静态方法上
2)、使用:指定具体类型
1.编译时会进行类型检查;
2.获取数据时不需要强制类型转换。 -
泛型使用时不能制定基本类型
例子:
/**
* 泛型类:声明时使用泛型
* 字母:
* T:type表示类型
* K V :是键值中的key,value
* E :代表elemnt
* ? :表示不确定的认意类型
* 使用时确定类型,不能用基本类型
* 注意
* 1、泛型只能使用引用类型,不能使用基础类型
* 2、泛型声明时字母不能使用静态属性和静态方法上
* @author DELL
*泛型有点像C语言里的宏定义,例如:define int T2
* @param <T>
*/
public class Student<T1,T2> {
private T1 javaScore;
private T2 oracleScore;
//泛型声明时不能使用静态属性和静态方法上
//private static T1 test;
public T1 getJavaScore() {
return javaScore;
}
public void setJavaScore(T1 javaScore) {
this.javaScore = javaScore;
}
public T2 getOracleScore() {
return oracleScore;
}
public void setOracleScore(T2 oracleScore) {
this.oracleScore = oracleScore;
}
public static void main(String[] args) {
//使用时指定类型(引用类型)
/*java为每种基本类型都提供了对应的封装类型,
* 分别为:Byte、Short、Integer、Long、
* Float、Double、Character、Boolean。
* 引用类型是一种对象类型,
* 它的值是指向内存空间的引用,就是地址。
*/
Student<String ,Integer> stu = new Student<String ,Integer>();
//1、安全:类型检查
stu.setJavaScore("优秀");
//2、省心:类型转换
int it = stu.getOracleScore(); //自动拆箱
}
}
下面解释泛型的优点不必频繁拆装箱
/**
* 获取值:
* 1、需要强制类型转换
* 2、类型检查:避免出现转换错误java.lang.ClassCastException:
* @author DELL
*
*/
public class App {
public static void main(String[] args) {
Object obj = 70;
int score = (int) obj;//jdk1.7以后Object-->Integer-->int(自动拆箱)
System.out.println(score);
//存入整数 发生自动装箱int-->Integer-->Object
Student stu = new Student(80,90);
//()stu.getJavase();
int javaScore = (Integer)stu.getJavase();
String oracleScore = null;
//获得是值是否属于String类型
if(stu.getOracle() instanceof String) {
oracleScore = (String)stu.getOracle();
}
System.out.println("分数为"+javaScore+","+oracleScore);
}
}