泛型特性

  • 声明泛型方法时,类型参数要放在修饰符(例如public和static)之后,返回类型之前;
  • 泛型类型参数不能用基本类型实例化
    Entry<String, int> entry; //error
    
  • 泛型类型参数可以有多个限定:T extends Runnalbe & AutoCloseable
  • 泛型不能被实例化,包括泛型数组
  • 泛型类型参数可以有多个接口限定,但最多只能有一个类;如果有一个限定是类,那么它必须放在限定列表第一位
  • JAVA可以使用通配符限制方法的参数类型和返回类型应该如何变化,这种机制有时被称作使用时变化

  • 子类型通配符和父类型通配符

<? extends Runnable>表示任意Runnable的子类型;
<? super Employee>表示Employee的一个父类型;
  • 创建泛型数组
// 方式一
public static <T> T[] get(Class<T> type, int size) {
        return (T[]) Array.newInstance(type, size);
    }

// 方式二(先声明通配类型数组再强制转换)
Pair<String>[] pairs = (Pair<String>[]) new Pair<?>[10];
  • 钻石语法

JAVA泛型转换

  • 虚拟机中没有泛型,只有普通类和方法;
  • 所有的类型参数都用他们的限定类型替换;
  • 桥方法被合成来保持多态;
  • 为保持类型安全性,必要时插入强制类型转换;

results matching ""

    No results matching ""