泛型
泛型:在类定义时不指定类中的具体数据类型,而是用标识符来替代,在外部调用时自己指定其类型。提升了代码的灵活性。
1. 泛型的应用
public class Generics_0117<Y,M,D> {
public Y getYear() {
return year;
}
public void setYear(Y year) {
this.year = year;
}
public M getMonth() {
return month;
}
public void setMonth(M month) {
this.month = month;
}
public D getDay() {
return day;
}
public void setDay(D day) {
this.day = day;
}
private Y year;
private M month;
private D day;
}
public class Test {
public static void main(String[] args) {
Generics_0117<Integer,Integer,Float> time = new Generics_0117();//自定义类型
time.setYear(2021);
time.setMonth(01);
time.setDay(0.5f);
System.out.println("现在时间:"+time.getYear()+"年"+time.getMonth()+"月"+time.getDay()+"日");
}
}
2.泛型的通配符
在方法的参数泛型不明确的时候可以用"?"去代替
public class Test {
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList();
arrayList.add(1);
ArrayList<String> arrayList1 = new ArrayList();
arrayList1.add("你好");
data(arrayList);
data(arrayList1);
}
public static void data(ArrayList<?> list){
System.out.println(list);
}
}
3.泛型的上限与下限
上限:表示实例化的具体数据类型可以是上限数据类型的子类或上限本身
使用方法:类名<? extends 上限类名>
下限:表示实例化的具体数据类型可以是下限父类或下限本身
使用方法:类名<? super 下限类名>
public class Data<T> {
public static void main(String[] args) {
//上限
test1(new Data<Number>());
test1(new Data<Integer>());
test1(new Data<Double>());
//下限
test2(new Data<String>());
test2(new Data<Object>());
}
public static void test1(Data<? extends Number> data){
}
public static void test2(Data<? super String> data){
}
}