使用泛型的好处与定义和使用含有泛型的类

使用泛型的好处

创建集合对象,使用泛型好处:
1.避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型
2.把运行期异常(代码运行之后会抛出的异常),提升到了编译期(写代码的时候会报错)弊端:
泛型是什么类型,只能存储什么类型的数据

复制代码
package Collection_Demo01;

import java.util.ArrayList;
import java.util.Iterator;

public class Demo04_Demo01Generic {
    public static void main(String[] args) {
        show02();
    }
            /*
            创建集合对象,使用泛型好处:
1.避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型
2.把运行期异常(代码运行之后会抛出的异常),提升到了编译期(写代码的时候会报错)弊端:
泛型是什么类型,只能存储什么类型的数据
             */
    private static void show02() {
        ArrayList<String> list = new ArrayList<>();
        list.add("abc");
        //list,add (1 ); //add(java.Lang.string)in ArrayList cannot be applied to (int)
        //使用迭代器遍历list集合
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()){
            String s = iterator.next();
            System.out.println(s+"->"+s.length());
        }

    }

    /*
   创建集合对象,不使用泛型
   好处:
    集合不使用泛型,默认的类型就是object类型,可以存储任意类型的数据
   弊端:
    不安全,会引发异常
     */
    private static void show01() {
        ArrayList list = new ArrayList<>();
            list.add("abc");
            list.add(1);

        //使用迭代器遍历List集合
        // 获取迭代器
        Iterator iterator = list.iterator();
        //使用迭代器中的方法hasNext和next遍历集合while(it.hasNext(O)i
        while (iterator.hasNext()){
            //取出元素也是object类型
            Object next = iterator.next();
            System.out.println(next);

            //想要使用string类特有的方法, Length获取字符串的长度;不能使用多态 object obj = "abc";
            //需要向下转型
            String  s =(String)next;
            System.out.println(s.length());

        }


    }
}
复制代码

泛型的定义与使用
我们在集合中会大量使用到泛型,这里来完整地学习泛型知识。
泛型,用来灵活地将数据类型应用到不同的类、方法、接口当中。将数据类型作为参数进行传递。

定义和使用含有泛型的类
定义格式:|

修饰符class类名<代表泛型的变量>{}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package Generic01_Demo01;
/*
定义一个含有泛型的类,模拟Arraylist集合
泛型是一个未知的数据类型,当我们不确定什么什么数据类型的时候,可以使用泛型泛型可以接收任意的数据类型,可以使用Integer,string,student. . .
创建对象的时候确定泛型的数据类型
 */
public class GenericClass<E> {
    private E  name;
 
    public E getName() {
        return name;
    }
 
    public void setName(E name) {
        this.name = name;
    }
}

 

复制代码
package Generic01_Demo01;

public class Demo02GenericClass {
    public static void main(String[] args) {
        //不写泛型默认为Obectle类型
        GenericClass genericClass = new GenericClass();
        genericClass.setName("只能是字符串");
        Object name = genericClass.getName();
        //创建Genericclass对象,泛型使用Integer类型
        GenericClass<Integer> genericClass1 = new GenericClass<>();
        genericClass1.setName(1);

        Integer name1 = genericClass1.getName();
        System.out.println(name1);

        //创建Genericclass对象,泛型使用string类型
        GenericClass<String> genericClass2 = new GenericClass<>();
        genericClass2.setName("小明");
        String name2 = genericClass2.getName();
        System.out.println(name2);


    }
}
复制代码

 

 

 

posted @   zj勇敢飞,xx永相随  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示