• JAVA泛型基础


    1. 自定义泛型

    1. 泛型类:

      1. 具有泛型变量的类
      2. 在类名后用代表引入类型
      3. 多个字母表示多个引入类型如<T, U>等
      4. 引入类型可以修饰成员变量/局部变量/参数/返回值
      public class Interval<T> {
      private T lower;
      private T upper;
      
      public Interval(T lower, T upper) {
      	this.lower = lower;
      	this.upper = upper;
      }
      public T getLower() {
      	return lower;
      }
      public void setLower(T lower) {
      	this.lower = lower;
      }
      
       public static void main(String[] args) {		
      	Interval<Integer> v1 = new Interval<>(1, 2);
      	int lower = v1.getLower();
      	int upper = v1.getUpper();
      }
      
    2. 泛型接口:

      1. 和泛型类相似,在类名后加
      2. T用来指定方法返回值和参数
      3. 实现接口时,应该指定T的类型
      public interface Calculator<T> {
      	public T add(T operand1, T operand2);
      }
      
      

      实现类:

       public class IntegerCalculator implements Calculator<Integer> {
      
       public Integer add(Integer operand1, Integer operand2) {
               return operand1 + operand2;
            }
       
           public static void main(String[] args)
           {
               IntegerCalculator c1 = new IntegerCalculator();
               System.out.println(c1.add(1,2));
           }
       }
      
    3. java的泛型方法

      1. 具有泛型参数的方法
      2. 该方法可在普通类/泛型类中
      3. 在修饰符后,返回类型前
       public static <T> Interval<T> getReverse(Interval<T> interval){
           return new Interval<T>(interval.getUpper(), interval.getLower());
       }
      

    2. 泛型类型限定

    • T extends Comparable继承和实现接口都采用comparable
    • 可以有多个,以&拼接,如<T extends Comparable&Serializable>,可以有多个接口但是只有一个类,类在第一位
    • 逗号隔参数,<T extends File & Cloneable, U extends Serializable>

    上界限定符:

    Pair<? extend S>:

    • pair能接受的参数类型,是S自身或子类。

    下限界定符:

    Pair<? super S>:

    • pair能接受的类型参数,是S的自身或者超类。
    • 只能set/不能get

    泛型PECS原则:
    Producer Extends,Consumer Super

    • 从泛型类中读取类型T的数据,不能写入,使用? extends
    • 写入不能读取使用? super通配符,
    • 既写入又读出不使用通配符

    无限定类型的泛型:
    pair<?>无限定通配符,表示任意类型

    3. 泛型实现的本质

    在class文件没有泛型概念,jvm采取类型擦除,JVM里面没有泛型对象,而是采用类型擦除技术,
    只有普通的类和方法,无限定类型时所有泛型都会变为object类型

  • 相关阅读:
    胜利大逃亡
    求最小环
    Prime算法
    网站根目录下没有正确的DNT.config文件 (不同类型错误更新中)
    Day4_代码重用与函数
    Day1_算法分析方法
    Day3_字符串操作与正则表达式
    错误解决一_call time passbyreference removed
    Day1_PHP快速入门
    silverlight 动态加载树形菜单[带图标],方法一
  • 原文地址:https://www.cnblogs.com/innndown/p/12361656.html
Copyright © 2020-2023  润新知