Java集合之泛型<E>

声明一个泛型类

class People<E>

People是泛型类的名称

E为泛型,他可以是任意的对象或接口,但不能是基本类型,当用泛型类去创建一个对象,E要指定为引用类型。

方法泛型

Public<E> void  Demo01(E e){}.....................非静态方法的泛型的类型最好与类中的泛型保持一致

Public static<W> void  Demo01(W  e){}...................静态方法的泛型的类型不能与类中的泛型保持一致,要声明自己的泛型<W>。因为,静态方法随着类的加载而加载,而静态在没有创建对象的时候它就赋值。例如(static int a;  a默认输出为0),此时就会报错。

泛型接口

interface Inter<T>{
    public void show(T t);
}
class Demo implements Inter<String>{ //在声明一个类实现接口的时候,不需要给自己的类添加一个泛型
    @Override
    public void show(String t) {
        System.out.println(t);
    }
}

泛型之通配符

/*A:泛型通配符:<?>
*  当右边的泛型不确定时,左边可以指定为?号
* B:? extends E
*   向下限定,E和子类
* c:? super E
*    向上限定  E和父类
* */
List<?> list = new ArrayList<String>();// 当右边的泛型不确定时,左边可以指定为?号

类型安全
            1、泛型的主要目标是提高 Java 程序的类型安全
            编译时期就可以检查出因 Java 类型不正确导致的 ClassCastException 异常
            符合越早出错代价越小原则
           2、消除强制类型转换
            泛型的一个附带好处是,使用时直接得到目标类型,消除许多强制类型转换
            所得即所需,这使得代码更加可读,并且减少了出错机会
           3、潜在的性能收益
            由于泛型的实现方式,支持泛型(几乎)不需要 JVM 或类文件更改
            所有工作都在编译器中完成
            编译器生成的代码跟不使用泛型(和强制类型转换)时所写的代码几乎一致,只是更能确保类型安全而已

详情:https://blog.csdn.net/u011240877/article/details/53545041

例如:

public class Demo01_E {
    public static void main(String[] args){
        /*java泛型
        *   集合的泛型要保证前后数据一致
        * */
        ArrayList<Student> list = new ArrayList<Student>();// 集合的泛型要保证前后数据一致,泛型是引用类型、不能是基本类型
        ArrayList<Object> list1 = new ArrayList<>();// 1.7版本的新特性,菱形泛型,后面的默认也前面类型。因为Object是超级父类,泛型定义为object无意义
        list.add(new Student("张三",23));
        list.add(new Student("李四",24));

        Iterator<Student> it = list.iterator();//迭代的时候确定是Student对象
        while(it.hasNext()){
            Student student = it.next();/*如果不使用泛型,it.next()返回的是Object对象,
此时就不能调用到student对象的get和set方法,如果写了在编译的时候就会提示报错,必须向下转型    
Student student = (Student)it.next();。然而当声明泛型后,迭代器已经确定好迭代的对象Student,此时就不用强转了。*/
            System.out.println(student.getName()+"....."+student.getAge());
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值