一.泛型
1.什么是泛型
所谓的泛型就是在类定义时,不为类中属性和方法指定数据类型,而是在类对象创建时为其指定相应的数据类型。
其实我们再使用集合时就用过泛型List<T> 创建一个List对象List<T> list=new ArrayList();
<T>它就是泛型。
2.泛型的作用
解决数据类型的安全问题
泛型的主要目标是提高 Java 程序的类型安全。编译时的强类型检查;通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。其主要原理是在类声明时通过一个标识表示类中某个属性的数据类型或者是某个方法的返回值及参数类型。这样在类声明或者实例化时只要指定好需要的类型即可。
3.泛型的定义
泛型可以定义在类上,接口上,方法上。 泛型类,泛型接口以及泛型方法。
泛型定义的格式:
修饰符 class 类名 <泛型标志,泛型标志.......>{
}
//这是使用的是默认修饰符
//T标志可以任意起名。
class Point<T>{
//定义T类型的对象
private T name;
//普通方法
public void show(){
System.out.println("name的名字是:"+name);
}
public T getName() {
return name;
}
public void setName(T name) {
this.name = name;
}
public Point() {
}
public Point(T name) {
this.name = name;
}
}
4.使用泛型
//新建测试类调用定义好的泛型类(调用时可以指定泛型的类型,默认为Object类型)
public class Test02 {
public static void main(String[] args) {
//指定泛型为字符串类型
Point<String> point = new Point<String>();
point.setName("st");
point.show();
//指定泛型为Integer类型(可以通过get、set传参,也可以直接使用构造函数传参)
Point<Integer> point = new Point<Integer>(53);
point.show();
//指定泛型为Double类型
Point<Double> point = new Point<Double>(5.3);
point.show();
}
}
注意: 上面的泛型类型必须都是引用类型。不能是基本类型
5.通配符
在开发中对象的引用传递是最常见的,但是如果在泛型类的操作中,在进行引用传递时泛型类型必须匹配才可以传递,否则是无法传递的。如果想传递,可以定义泛型为?通配符。
public class Demo02 {
public static void main(String[] args) {
//不定义则是Object类型
Info info = new Info();
info.setT("3.23sdkd");
fun(info);
//定义泛型为String类型
Info<String> info1 = new Info<>();
//只能添加String类型的值
info1.setT("哈哈哈");
//fun(info1);