zoukankan      html  css  js  c++  java
  • 自定义泛型结构:泛型类、泛型接口、泛型方法

    1. 泛型的声明
    interface List<T> 和 class GenTest<K,V>
    其中,T,K,V不代表值,而是表示类型。这里使用任意字母都可以。
    常用T表示,是Type的缩写

    2. 泛型的实例化:
    一定要在类名后面指定类型参数的值(类型)。如:
    List<String> strList = new ArrayList<String>();
    Iterator<Customer> iterator = customers.iterator();
     T只能是类,不能用基本数据类型填充。但可以使用包装类填充
     把一 个 集合 中是 的内容限制为一个特定的数据类型,这就是generics 背后
    的核心思想

     

    自定义泛型结构:泛型类、泛型接口

     

     

     

    应用场景举例:
    【DAO.java】:定义了操作数据库中的表的通用操作。 ORM思想(数据库中的表和Java中的类对应)
    public class DAO<T> {//表的共性操作的DAO

    //添加一条记录
    public void add(T t){

    }

    //删除一条记录
    public boolean remove(int index){

    return false;
    }

    //修改一条记录
    public void update(int index,T t){

    }

    //查询一条记录
    public T getIndex(int index){

    return null;
    }

    //查询多条记录
    public List<T> getForList(int index){

    return null;
    }

    //泛型方法
    //举例:获取表中一共有多少条记录?获取最大的员工入职时间?
    public <E> E getValue(){

    return null;
    }

    }

    【CustomerDAO.java】:
    public class CustomerDAO extends DAO<Customer>{//只能操作某一个表的DAO
    }

    【StudentDAO.java】:
    public class StudentDAO extends DAO<Student> {//只能操作某一个表的DAO
    }

     

     自定义泛型结构:泛型方法

     

     

    package com.atguigu.java;
    
    import org.junit.Test;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /** 如何自定义泛型结构:泛型类、泛型接口;泛型方法。
     *
     * 1. 关于自定义泛型类、泛型接口:
     *
     *
     *
     * @author CH
     * @create 2021 上午 11:09
     */
    public class GenericTest1 {
    
        @Test
        public void test1(){
            //如果定义了泛型类,实例化没有指明类的泛型,则认为此泛型类型为Object类型
            //要求:如果大家定义了类是带泛型的,建议在实例化时要指明类的泛型。
            Order order = new Order();
            order.setOrderT(123);
            order.setOrderT("ABC");
    
            //建议:实例化时指明类的泛型
            Order<String> order1 = new Order<String>("orderAA",1001,"order:AA");
    
            order1.setOrderT("AA:hello");
    
        }
    
        @Test
        public void test2(){
            SubOrder sub1 = new SubOrder();
            //由于子类在继承带泛型的父类时,指明了泛型类型。则实例化子类对象时,不再需要指明泛型。
            sub1.setOrderT(1122);
    
            SubOrder1<String> sub2 = new SubOrder1<>();
            sub2.setOrderT("order2...");
        }
    
        @Test
        public void test3(){
    
            ArrayList<String> list1 = null;
            ArrayList<Integer> list2 = new ArrayList<Integer>();
            //泛型不同的引用不能相互赋值。
    //        list1 = list2;
    
            Person p1 = null;
            Person p2 = null;
            p1 = p2;
    
    
        }
    
        //测试泛型方法
        @Test
        public void test4(){
            Order<String> order = new Order<>();
            Integer[] arr = new Integer[]{1,2,3,4};
            //泛型方法在调用时,指明泛型参数的类型。
            List<Integer> list = order.copyFromArrayToList(arr);
    
            System.out.println(list);
        }
    }
    不积跬步,无以至千里;不积小流,无以成江海。
  • 相关阅读:
    设计模式学习每日一记(16.模板方法模式)
    lrzsz工具移植交叉编译
    设计模式学习每日一记(17.解释器模式)
    鼠标键盘共享之Synergy工具
    wpf中textblock竖立显示文本
    c#中常会涉及到一些类,List的深度拷贝。
    SQL 2005 多表分页存储过程
    C#中的委托和事件(续)[转]
    制作sitemap与在线生成网站地图并提交
    操作EXcel
  • 原文地址:https://www.cnblogs.com/CCTVCHCH/p/14850721.html
Copyright © 2011-2022 走看看