1.什么是泛型
List<E>:这里的<E>就是泛型标志,Map<K,V>这里<K,V>也是泛型标记。
泛型:就是类再定义时无法确认类中成员的类型(属性,方法),而是类再创建时指定具体的数据类型。
2.为什么使用泛型
例子: 定义一个Point 点类,要求如下
它的坐标值可以是整数。
它的坐标值也可以都是小数。
它的坐标值也可以都是字符串类型。
package demo01;
public class Point {
private Object x;
private Object y;//因为Object是所有类的父类,而且多态,子类类型可以自动向父类类型转化。
public Point(Object x, Object y) {
this.x = x;
this.y = y;
}
@Override
public String toString() {
return "Point{" +
"x=" + x +
", y=" + y +
'}';
}
public Object getX() {
return x;
}
public void setX(Object x) {
this.x = x;
}
public Object getY() {
return y;
}
public void setY(Object y) {
this.y = y;
}
}
package demo01;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
//整型坐标
Point p1=new Point(25,36);
//小数类型
Point p2=new Point(25.5,36.6);
//字符串类型
Point p3=new Point("北纬25度","东经36度");
//字符串和整型
Point p4=new Point("北纬36度",15);
String x = (String) p4.getX();
//java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
//如果使用Object定义类中属性类型,那么可能再后期会出现数据类型安全问题。
String y = (String) p4.getY();
}
}
以上代码使用Object接受任意参数,可能会发生数据类型安全问题,由于我们无法在类定义时去人类中成员的数据类型,所以我们可以使用泛型来解决数据类型安全问题。
3. 如何定义类的泛型?
泛型可以解决数据类型的安全性问题,其主要原理是在类声明时通过一个<标识>表示类中某个属性的数据类型或者是某个方法的返回值及参数类型。这样在类声明或者实例化时只要指定好需要的类型即可。
语法:
public class 类名<T,E,B>{
private T a;
public T getA(){}
public void setA(T t){}
}泛型标志可以是任意字符。习惯使用T
package com.aaa.demo01;
public class Point<T> {
private T x;
private T y;