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);
        }
    }
    不积跬步,无以至千里;不积小流,无以成江海。
  • 相关阅读:
    解决ListView异步加载数据之后不能点击的问题
    android点击实现图片放大缩小 java技术博客
    关于 数据文件自增长 的一点理解
    RAC 实例不能启动 ORA1589 signalled during ALTER DATABASE OPEN
    Linux 超级用户的权利
    RAC 实例 迁移到 单实例 使用导出导入
    Shell 基本语法
    Linux 开机引导与关机过程
    RAC 实例不能启动 ORA1589 signalled during ALTER DATABASE OPEN
    Oracle RAC + Data Guard 环境搭建
  • 原文地址:https://www.cnblogs.com/CCTVCHCH/p/14850721.html
Copyright © 2011-2022 走看看