• java泛型的理解


    泛型程序设计(Generic programming)的魅力所在:编写的代码可以被不同的类型对象所复用。
    类型参数的意义:以前没有类型参数的时候ArrayList里面的里面添加不同类型的对象,不会报错,但是你取出的时候需要进行强制类型转换,就会报错,不同的对象需要进行不同的对象的类型转换。有了泛型之后,你添加的类型就可以确认,如果类型不对编译的时候就会报错,泛型是编译时作用,而不是运行时作用。

    ArrayList<String> files=new ArrayList<>();//<>里面不需要写String在JAVA7之后就不用写了
            arrayList.add("hjsjy");
            arrayList.add(1);//不同类型就会编译报错
            arrayList.get(0);//
    
    

    例子
    下面 T extends Comparable 这句 extends的原因extends更接近子类的概念,可以是类或者接口。
    多个接口或者类 需要 &符号。

    T extends Comparable&Serializable

    /**
     * 计算泛型数组的最大值和最小值
     *
     * @author hjsjy
     * @create 2018/10/8
     * @since 1.0.0
     */
    public class PairTest {
        public static void main(String[] args) {
            LocalDate[] birthdays={
                LocalDate.of(1992, 1, 4),
                LocalDate.of(1993, 5, 1),
                LocalDate.of(1994, 4, 2),
                LocalDate.of(1995, 3, 3),
                LocalDate.of(1996, 2, 7)
            };
            Pair<LocalDate> minmax = Arrayminmax.minmax(birthdays);
            System.out.println(minmax.getFirst());
            System.out.println(minmax.getSecond());
    
    
        }
    
    }
    class Arrayminmax{
        public static <T extends Comparable> Pair<T> minmax(T[] a){//<T extends Comparable> 是类型参数, Pair<T>是返回值类型
            if(a==null||a.length==0){
                return null;
            }
            T min = a[0];
            T max = a[0];
            for (int i = 1; i <a.length ; i++) {
                if(min.compareTo(a[i])>0){
                    min = a[i];
                }
                if(min.compareTo(a[i])<0){
                    max = a[i];
                }
            }
            return new Pair<>(min,max);//这里面<>里面不需要写
        }
    }
    
    • 不能使用基本类型是实例化类型参数
      没有Pair< double>,只有Pair< Double> 因为类型擦除之后Pair类含有Object类型,Object不能存储double值。
    • 不能创建参数化类型的数组
      Pair< String >[] table=new Pair< String>[10];//Error
    • 不能实例化类型变量
      new T(…) T.class new T[…] Error
    • 不能在泛型类的静态上下文中类型变量无效
    public class Single<T>{
    	private static T singleInstance;//error
    		public static getSIngleInstance(){//error
    		return singleInstance;
    	}	
    }
    
    • 不能排除或捕获泛型类的实例
      本文参考:《java核心技术 卷1》
  • 相关阅读:
    thinkphp 5 隐藏index.php
    jquery ajax参数
    图标字的使用方法
    jquery监听浏览宽度
    手机屏幕的宽度自动适应
    前站常用代码
    服务消费者(Feign-上)
    服务消费者(Ribbon)
    注册中心(Eureka/Consul)
    JDK8 日期格式化
  • 原文地址:https://www.cnblogs.com/narojay/p/10812602.html
Copyright © 2020-2023  润新知