Hefery 的个人网站

Hefery's Personal Website

Contact:hefery@126.com
  menu
73 文章
0 浏览
1 当前访客
ღゝ◡╹)ノ❤️

Java基础—泛型

泛型简介

创建对象时,将未知的类型确定具体的类型。当没有指定泛型时,默认类型为 Object 类型,类型作为参数传递

泛型标记符:

  • E e:Element
  • T t:Type
  • K k:Key
  • V v:Value
  • N n:Number
  • ?:不确定的 Java 类型

泛型使用

泛型方法

泛型方法在调用时接收不同类型的参数。根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用

修饰符 <泛型> 返回值类型 方法名(参数列表) {
        //方法体
}

类型参数只能代表引用型类型,不能是原始类型(像 int、double、char 等)

public class GenericMethodTest {
   // 泛型方法 printArray   
   public static <E> void printArray(E[] inputArray) {
      // 输出数组元素  
         for (E element : inputArray) {  
            System.out.printf( "%s ", element );
         }
         System.out.println();
    }
 
    public static void main( String args[] ) {
        // 创建不同类型数组: Integer, Double 和 Character
        Integer[] intArray = { 1, 2, 3, 4, 5 };
        Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
        Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };
 
        System.out.println( "整型数组元素为:" );
        printArray( intArray  ); // 传递一个整型数组
 
        System.out.println( "\n双精度型数组元素为:" );
        printArray( doubleArray ); // 传递一个双精度型数组
 
        System.out.println( "\n字符型数组元素为:" );
        printArray( charArray ); // 传递一个字符型数组
    } 
}

泛型接口

修饰符 interface接口名<泛型> {  }

public interface GenericInterface<I> {
    public abstract void method(I i);
}

泛型类

修饰符 class 类名<泛型> {  }
  • 泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开
public class Box<T> {
   
  private T t;
 
  public void add(T t) {
    this.t = t;
  }
 
  public T get() {
    return t;
  }

}

受限泛型

JAVA 泛型中可以指定一个泛型的上限和下限

泛型的上限:

  • 格式: 类型名称 <? extends 类 > 对象名称
  • 意义: 只能接收该类型及其子类

泛型的下限:

  • 格式: 类型名称 <? super 类 > 对象名称
  • 意义: 只能接收该类型及其父类型
// 泛型的上限:此时的泛型?,必须是 Number 类型或者 Number 类型的子类
public static void getElement1(Collection<? extends Number> coll){ }

// 泛型的下限:此时的泛型?,必须是 Number 类型或者 Number 类型的父类
public static void getElement2(Collection<? super Number> coll){ }

public static void main(String[] args) {
    Collection<Integer> list1 = new ArrayList<Integer>();
    Collection<String> list2 = new ArrayList<String>();
    Collection<Number> list3 = new ArrayList<Number>();
    Collection<Object> list4 = new ArrayList<Object>();
  
    getElement(list1);
    getElement(list2);  // 报错
    getElement(list3);
    getElement(list4);  // 报错
  
    getElement2(list1);  // 报错
    getElement2(list2);  // 报错
    getElement2(list3);
    getElement2(list4);
}

标题:Java基础—泛型
作者:Hefery
地址:http://hefery.icu/articles/2022/03/29/1648528088463.html