• 笔记——Java泛型


    泛型

    泛型是解决“数据类型与算法在编译是绑定”这一问题的有效方法之一。泛型最大的价值在于:在保证类型安全的前提下,把算法与数据类型解耦。

    3.2泛型类

    泛型类是指该类使用的参数类型作用于整个类,即在类的内部任何地方(不包括静态代码区域)都可把参数类型当做一个真实类型来使用。




    public class Person<T>{
        private T t;
        public Person(T t){
            this.t = t;
        }
        public String toString(){
            return "参数的类型是:" + t.getClass().getCanonicalName();
        }
    }
    
    public class Teacher<V,S> extends Person{
        protected V v;
        private S s;
        public Teacher(Object t){
            super(t);
        }
        
        public void set(V v,S s){
            this.v = v;
            this.s = s;
        }
    }

    泛型方法

    public class Factory{
        public<T> T generator(Class<T> t) throws Exception{
            return t.newInstance();
        }
    }

    泛型接口

    public interface Factory<T>{
        public T create();
    }

    泛型方法使得该方法能够独立于类而发生变化。以下是一个基本的指导原则:无论何时,只要你能做到,你就应该尽量使用泛型方法。也就是说,如果使用泛型方法可以取代将整个类泛型化,那么就应该只用泛型方法。另外,对于一个static的方法而言,无法访问泛型类的类型参数,所以,如果static方法需要使用泛型能力,就必须使其成为泛型方法。

    Java泛型是使用擦除来实现的,这意味着当你在使用泛型时,任何具体的类型信息都被擦除了,你唯一知道的就说你在使用一个对象。因此List<String>和List<Integer>在运行时事实上是相同的类型。这两种形式都被擦除称他们的“原生”类型,即List。

    必须查看代码确定是否“足够复杂”到必须使用泛型的程度。

    擦出的代价是显著的。泛型不能用于显示的引用运行时类型的操作之中,例如转型、instanceof操作和new表达式。因为所有关于参数的类型信息都丢失了,无论何时,当你在编写泛型代码时,必须时刻提醒自己,你只是看起来好想拥有有关参数的类型信息而已。

    ——摘自《Think in Java》

  • 相关阅读:
    BigDecimal精确到几位以及四舍五入
    IDEA配置
    IDEA配置
    IntelliJ IDEA 2018.3.3配置 Tomcat 9,控制台出现中文乱码 “淇℃伅”
    JSP九大内置对象详解
    面试题
    配置编码格式
    SpringAop注解(增强)异常
    springmvc异常
    android保持Session会话
  • 原文地址:https://www.cnblogs.com/wxx23-IOU/p/14444419.html
Copyright © 2020-2023  润新知