zoukankan      html  css  js  c++  java
  • 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类型

  • 相关阅读:
    Struts2框架复习(一)--最基本的struts2框架
    CentOS7安装MariaDB成功的实践
    Visual Studio 2015 配置 Python 环境
    使用 Visual Studio 2015 + Python3.6 + tensorflow 构建神经网络时报错:'utf-8' codec can't decode byte 0xcc in position 78: invalid continuation byte
    C++解析Json,使用JsonCpp读写Json数据
    【CMake】CMake ERROR:could not find git for clone of
    【CMake】CMake GUI构建VS等项目
    SPH液面重构过程中的问题
    SPH流体模拟及液面重构问题
    mybatis级联查询,多对一查询问题
  • 原文地址:https://www.cnblogs.com/innndown/p/12361656.html
Copyright © 2011-2022 走看看