java泛型总结

来源:互联网 发布:热点图 软件 编辑:程序博客网 时间:2024/06/15 22:00

泛型的引入是为了解决:

java是强类型的,每个变量都必须有它的类型声明,比如 int a=2;  Box b = new Box(); 

但是

0、当一个变量不确定它的类型的时候就得用泛型了,比如:T a; List<?> a; List<E> a;

1、方法内有个属性  或者  是入参和返回值 的类型不确定的时候,

且方法里面包括参数里面只要写了 <X>泛型,方法的返回值或者void前面就必须加 <X> 这种泛型, 但是如果这个X在 本项目内定义过了class X,方法前可以不加,那这个方法里面用的X类型的变量 就只能接受 X 类new的对象,如果X在项目内没有定义,则表示X是泛型,可以接受任何对象,就得在方法前加<X>,不然编译报错 missing type

public static   <Box2, E, T> void main(String[] args) {        

        T a= func(new ArrayList<>());        
        List<E> data2 = getData(new ArrayList<>());// 把<E>写成<?>也行,方法前就不用加<E>了

        List<Box2> data1 = getData(new ArrayList<>()); //方法前可以不加<Box2>

}

 static  <T> T func(List<? extends String> l){

        return null;
    } 

2、类 里面有不确定的类型 的时候,在类名后面加<T>,指代类里面所有用到的T

class Box<T, E> {   //这里不能写成Box<?>
        private T data;

        List<?> list;

List<E> list1;  //这个E就是new 这个对象的时候指定的类型了

}

3、或者容器里面的元素类型 List<?> List<E> ; 不确定的时候。


注意:

<T> type 一般用在类上  <E> element一般用在list等容器里面  <K,V>用于map。当然也可以随便乱用 大小写都可以。

<?>泛型通配符  一般用于<? extends x> 表示 所有x的子类;<? super x>  表示 所有x的父类

或者用于 List<?> a;但是不能用于 声明变量 ? a ;

 public    void getData0(Box<?> data){   //这是个方法 }  =   public  <T> void getData1(Box<T> data){  //这是个方法  }    //这2种写法使用起来一样




原创粉丝点击