泛型,java,就业班

时间:2021-07-27 13:03:15

—–## 自定义泛型 ##

原理:自定义泛型可以理解为是一个数据类型的占位符,或者理解为是一个数据类型的变量

1. 泛型方法

泛型方法格式:
泛型方法的定义格式: 修饰符 <声明自定义泛型>返回值类型 函数名(形参列表){

}
注意:
1.1.在方法上的自定义泛型的具体数据类型是调用该方法时传入实参时确定的
1.2.自定义泛型使用的标识符只要符合标识符的命名规则即可

实战需求:定义一个函数可以接收任意类型的参数,要求参数的返回值类型与实参的数据类型要一致

代码如下

public class GenecityMethod {
public static void main(String args[]){

Integer i = print(12);//Integer
String s = print("abc");//String
System.out.println(i);
System.out.println(s);
}
//<T>把T字母声明为自定义的泛型
public static <T> T print(T o){

return o;
}
}

2.泛型类
泛型类的定义格式:
class 类名<声明自定义的泛型>{

}

注意:
2.1.在类上自定义的反省你的具体数据类型实在创建对象的时候指定的
2.2.在类上自定义了泛型,如果创建该类的对象时没有指定泛型的具体类型,则默认为Object类型

实战需求自定义一个集合对象
代码如下:

class  MyList <T>{
Object[] arr;
int index = 0;

public MyList(){
arr = new Object[10];
}

public void add(T o){
arr[index++] = o;
}
}
public class GenecityClass {
public static void main(String args[]){
MyList<String> list = new MyList<String>();
list.add("123");
MyList list2 = new MyList();
list2.add(123);//若不指定自定义类型,则为Object类型
}
}
  1. 泛型接口
    泛型接口的定义格式:
    interface 接口名<声明自定义的泛型>{

    }

    注意:
    3.1.在接口上自定义泛型的具体的数据类型是在实现该接口的时候指定的 对应第一种
    3.2.如果一个接口自定义了泛型,如果实现该接口时时没有指定泛型的具体类型,则默认为Object类型
    如果想在创建接口实现类对象的时候再指定接口自定义泛型的具体数据类型? 对应第二种

实战需求两种方法实现
代码如下:

//接口中
public interface GenecityInterface<T> {
public void add(T t);
public void remove(T t);
}
//类中
/*第一种,实现该接口的时候指定自定义泛型的具体的数据类型
* public class i implements GenecityInterface<String>{

@Override
public void add(String t) {
// TODO Auto-generated method stub

}

@Override
public void remove(String t) {
// TODO Auto-generated method stub

}

}*/
/*第二种,在创建接口实现类对象的时候再指定接口自定义泛型的具体数据类型
* public class i<T> implements GenecityInterface<T>{

public static void main(){
new i<String>();
}

@Override
public void add(T t) {
// TODO Auto-generated method stub

}

@Override
public void remove(T t) {
// TODO Auto-generated method stub

}

}