“核心技术:泛型”的版本间差异

来自Wikioe
跳到导航 跳到搜索
第36行: 第36行:


== 泛型变量的限定 ==
== 泛型变量的限定 ==
是将T 限制为实现了Comparable 接口(只含一个方法compareTo 的标准接口)的类:
<syntaxhighlight lang="java">
public static <T extends Coiparab1e> T min(T[] a) . . .
</syntaxhighlight>
* 使用关键字extends 而不是implements
* T 和绑定类型可以是类, 也可以是接口
* 一个类型变量或通配符可以有多个限定:
*: <syntaxhighlight lang="java">
T extends Comparable & Serializable
</syntaxhighlight>
*: 限定类型用“&”分隔,而逗号用来分隔类型变量。


== 泛型代码和虚拟机 ==
== 泛型代码和虚拟机 ==

2020年10月22日 (四) 12:38的版本


为什么要使用泛型

泛型程序设计(Generic programming) 意味着编写的代码可以被很多不同类型的对象所重用。


类型参数( type parameters )。ArrayList 类有一个类型参数用来指示元素的类型:

ArrayList<String> files = new ArrayList<String>();
  • 在Java SE 7 及以后的版本中, 构造函数中可以省略泛型类型:
    ArrayList<String> files = new ArrayList<>();
    

定义简单泛型类

一个泛型类( generic class ) 就是具有一个或多个类型变量的类。

  • 换句话说,泛型类可看作普通类的工厂。

泛型方法

  • 类型变量放在修饰符(这里是public static ) 的后面,返回类型的前面。
class ArrayAlg
{
   public static <T> T getMiddle(T... a)
   {
      return a[a.length / 2];
   }
}

泛型变量的限定

是将T 限制为实现了Comparable 接口(只含一个方法compareTo 的标准接口)的类:

public static <T extends Coiparab1e> T min(T[] a) . . .
  • 使用关键字extends 而不是implements
  • T 和绑定类型可以是类, 也可以是接口
  • 一个类型变量或通配符可以有多个限定:
    T extends Comparable & Serializable
    
    限定类型用“&”分隔,而逗号用来分隔类型变量。

泛型代码和虚拟机

约束与局限性

泛型类的继承规则

通配符类型

反射和泛型