栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java实用技巧---泛型

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java实用技巧---泛型

 泛型:
     把明确数据类型的工作,提前到了编译时期,在创建集合的时候明确存储元素的数据类型。
     这样的做法有点向把数据类型当作参数一样传递,所以泛型还有一个叫法:参数化类型

 泛型的语句定义格式:
     <引用数据类型>
     注意:尖括号中的数据类型只能是引用数据类型

 泛型的好处:
     1、将我们运行时期出现的问题,提前到编译时期
     2、不需要做强制类型转换
     3、优化了代码。消除了不必要的黄色警告线,使代码看起来更简洁

通过观察API发现,泛型可以出现在类,接口,方法上面,我们看到的类似于这样的都叫泛型,一般来说,泛型出现大多使用的集合中。
public class GenericDemo {
    public static void main(String[] args) {
        //创建一个List集合对象
        //在JDK1.7之后,泛型会进行自动类型推断
        ArrayList list = new ArrayList<>();

        //向集合中添加元素
        list.add("hello");
        list.add("hello");
        list.add("hello");
        list.add("hello");
        list.add("hello");
//        list.add(20);
//        list.add(12.34);
//        list.add(new Student());

        //遍历
//        Iterator iterator = list.iterator();
//        while (iterator.hasNext()) {
//            Object next = iterator.next();
//
//            String s = (String) next; //ClassCastException
//
//            System.out.println(next);
//        }

        //遍历
        Iterator iterator = list.iterator();
        while (iterator.hasNext()){
            String next = iterator.next();
            System.out.println(next);
        }

    }
}
泛型通配符
    任意类型,如果没有明确,那么就是Object以及任意的Java类了
? extends E
    向下限定,E及其子类
? super E
    向上限定,E及其父类
public class GenericDemo1 {
    public static void main(String[] args) {
        ArrayList list1 = new ArrayList();
        ArrayList list2 = new ArrayList();
        ArrayList list3 = new ArrayList();

        //泛型通配符
        //任意类型,如果没有明确,那么就是Object以及任意的Java类了
        ArrayList list4 = new ArrayList();
        ArrayList list5 = new ArrayList();
        ArrayList list6 = new ArrayList();

        //? extends E  向下限定,E及其子类
        ArrayList list7 = new ArrayList();
        ArrayList list8 = new ArrayList();
        ArrayList list9 = new ArrayList();
// object为animal的父类  ArrayList lis10 = new ArrayList();

        //? super E  向上限定,E及其父类
        ArrayList list11 = new ArrayList();
        ArrayList list13 = new ArrayList();
//        ArrayList list12 = new ArrayList();



    }
} 
 
泛型类
    把泛型定义在类上
    格式:public class 类名<泛型类型1,…>
    注意:泛型类型必须是引用类型
这里的<>里面的内容仅仅表示的使一种参数数据类型,参数类型是一种变量
既然是一种变量,就要符合变量的命名规则,可以使任意符合标识符起名字规则的名字。

一般情况下,在定义的时候,习惯用一个大写字母表示。
public class GenericTool1 {
    private T obj;

    public T getObj(){
        return obj;
    }

    public void setObj(T obj){
        this.obj = obj;
    }

}
泛型方法
    把泛型定义在方法上
    格式:public <泛型类型> 返回类型 方法名(泛型类型 .)
public class GenericTool2 {
//    public void show(String s){
//        System.out.println(s);
//    }
//
//    public void show(int i){
//        System.out.println(i);
//    }
//
//    public void show(double d){
//        System.out.println(d);
//    }

    //用泛型方法改进,将来不确定要传入什么类型的数据
    public  void show(F f){
        System.out.println(f);
    }

}

public class GenericTest1 {
    public static void main(String[] args) {
        //如果不加泛型,默认使Object类型(创建对象调用方法)
//        GenericTool1 gt1 = new GenericTool1();
//        gt1.setObj("hello");
//        gt1.setObj(20);
//        gt1.setObj(12.34);

        GenericTool1 gt2 = new GenericTool1<>();
        gt2.setObj("hello");
//        gt2.setObj(20);

        String obj = gt2.getObj();


    }
}
用泛型改后的代码测试
public class GenericTest2 {
    public static void main(String[] args) {
        GenericTool2 genericTool2 = new GenericTool2();
        genericTool2.show("hello");
        genericTool2.show(10);
        genericTool2.show(12.34);

    }
}

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号