码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 泛型的继承、通配和练习


    本次博客带领大家了解泛型的继承和通配符,还有泛型最后的练习。

    泛型的继承和通配符说明

    1. 泛型不具备继承性。
    List list = new ArrayList();//错误的
    
    • 1
    1. :支持任意泛型类型。
    2. :支持A类以及A类的子类,规定了泛型的上限。
    3. :支持A类以及A类的父类,不限于直接父类,规定了泛型的下限。
    public class GenericExtends {
        public static void main(String[] args) {
            Object o = new String("xxx");
    
            //泛型没有继承性
            //List list = new ArrayList();
    
            //举例说明下面三个方法的使用
            List<Object> list = new ArrayList<>();
            List<String> list1 = new ArrayList<>();
            List<AAA> list2 = new ArrayList<>();
            List<BBB> list3 = new ArrayList<>();
            List<CCC> list4 = new ArrayList<>();
    
            //如果是List c,可以接收任意的泛型类型
            printCollection1(list);
            printCollection1(list1);
            printCollection1(list2);
            printCollection1(list3);
            printCollection1(list4);
    
            //? extends AAA 表示上限,可以接收 AAA或者AAA子类
            //printCollection2(list);//×
            //printCollection2(list1);//×
            printCollection2(list2);
            printCollection2(list3);
            printCollection2(list4);
    
            //? super AAA:支持AAA类以及AAA类的父类,不限于直接父类,规定了下限
            printCollection3(list);
            //printCollection3(list1);//×
            printCollection3(list2);
            //printCollection3(list3);//×
            //printCollection3(list4);//×
    
        }
        //说明:List 表示任意的泛型类型都可以接收
        public static void printCollection1(List<?> c){
            for (Object object :c) {
                System.out.println(object);
            }
        }
        //? extends AAA 表示上限,可以接收 AAA或者AAA子类
        public static void printCollection2(List<? extends AAA> c){
            for (Object object :c) {
                System.out.println(object);
            }
        }
        //? super AAA:支持AAA类以及AAA类的父类,不限于直接父类
        //规定了泛型的下限
        public static void printCollection3(List<? super AAA> c){
            for (Object object :c) {
                System.out.println(object);
            }
        }
    }
    class AAA{
    }
    class BBB extends AAA{}
    
    class CCC extends BBB{}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    练习:

    定义个泛型类DAO,其中定义一个Map成员变量,Map的键为String类型,值为T类型。

    分别创建以下方法:

    1. public void save(String id,T entity):保存T类型的对象到Map成员变量中。
    2. public T get(String id):从map中获取id对应的对象。
    3. public void update(String id,Tentity):替换map中key为id的内容,改为entity对象。
    4. public List list():返回map中存放的所有T对象。
    5. public void delete(String id):删除指定id对象。

    定义一个User类:

    该类包含:private成员变量(int类型)id,age;(String 类型)name。

    创建DAO类的对象,分别调用其save、get、update、list、delete方法来操作User对象,使用Junit单元测试类进行测试。

    public class Homework01 {
        @Test
        public void testList(){
    
            Dao<User> dao = new Dao<>();
            dao.save("001",new User(1,18,"jack"));
            dao.save("002",new User(2,19,"tom"));
            dao.save("003",new User(3,20,"smith"));
    
            List<User> list =dao.list();
            System.out.println("list="+list);
    
            dao.update("003",new User(3,28,"linan"));
            dao.delete("001");
            System.out.println("====修改后=====");
            list =dao.list();
            System.out.println("list="+list);
            System.out.println("id=003"+dao.get("003"));
        }
    }
    
    class Dao<T>{
        private Map<String,T> map = new HashMap<>();
    
        public void save(String id,T entity){
            map.put(id,entity);
        }
    
        public T get(String id){
            return map.get(id);
        }
    
        public void update(String id,T entity){
            map.put(id,entity);
        }
        //遍历map [k-v],将map的 所有value(entity),封装到ArrayList返回即可
    
        public List<T> list(){
            //创建一个ArrayList
            ArrayList<T> list = new ArrayList<>();
            //遍历map
            Set<String> keySet = map.keySet();
            for (String key :keySet) {
                list.add(get(key));
            }
    
            return list;
        }
    
        public void delete(String id){
            map.remove(id);
        }
    }
    
    class User{
        private int id;
        private int age;
        private String name;
    
        public User(int id, int age, String name) {
            this.id = id;
            this.age = age;
            this.name = name;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", age=" + age +
                    ", name='" + name + '\'' +
                    '}';
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
  • 相关阅读:
    Go语言入门【4】循环语句
    人工智能证书的作用
    碳关税及相关概念
    轻量封装WebGPU渲染系统示例<4>-CubeMap/天空盒(源码)
    九、Echart图表 之 grid组件用法 直角坐标系内绘图网格
    C++总结(9):Lambda表达式详解
    c语言的程序环境和预处理(一眼丁真)
    专业知识单选题练习系列(二)
    pandas使用to_datetime函数将时间字符串转化为时间对象、其中月份内容为字母而非数字(例如,“January 2, 2022“)
    机器学习(16)---聚类(KMeans)
  • 原文地址:https://blog.csdn.net/lidong777777/article/details/126126246
    • 最新文章
    • 攻防演习之三天拿下官网站群
      数据安全治理学习——前期安全规划和安全管理体系建设
      企业安全 | 企业内一次钓鱼演练准备过程
      内网渗透测试 | Kerberos协议及其部分攻击手法
      0day的产生 | 不懂代码的"代码审计"
      安装scrcpy-client模块av模块异常,环境问题解决方案
      leetcode hot100【LeetCode 279. 完全平方数】java实现
      OpenWrt下安装Mosquitto
      AnatoMask论文汇总
      【AI日记】24.11.01 LangChain、openai api和github copilot
    • 热门文章
    • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
      奉劝各位学弟学妹们,该打造你的技术影响力了!
      五年了,我在 CSDN 的两个一百万。
      Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
      面试官都震惊,你这网络基础可以啊!
      你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
      心情不好的时候,用 Python 画棵樱花树送给自己吧
      通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
      13 万字 C 语言从入门到精通保姆级教程2021 年版
      10行代码集2000张美女图,Python爬虫120例,再上征途
    Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
    正则表达式工具 cron表达式工具 密码生成工具

    京公网安备 11010502049817号