泛型的定义与使用

本文记录Java学习过程中遇到的泛型的定义和使用~

泛型,用来灵活地将数据类型应用到不同的类、方法、接口当中。将数据类型作为参数进行传递。

  • 含有泛型的类

定义格式为:

修饰符 class 类名<代表泛型的变量> { }

示例代码(API中的ArrayList集合):

class ArrayList<E>{
public boolean add(E e){ }
    public E get(int index){ }
}

使用格式为:

创建对象时,确定泛型的类型

示例代码(创建String类型的ArrayList):

ArrayList<String> list = new ArrayList<String>(); 

此时,变量E的值就是String类型。

class ArrayList<String>{
public boolean add(String e){ }
    public String get(int index){ }
}

示例代码(创建Interger类型的ArrayList):

ArrayList<Integer> list = new ArrayList<Integer>(); 

此时,变量E的值就是Integer类型。

class ArrayList<Integer>{
public boolean add(Integer e){ }
    public Integer get(int index){ }
}
  • 含有泛型的方法

定义格式为:

修饰符 <代表泛型的变量> 返回值类型 方法名(参数){ }

示例代码(API中的ArrayList集合中的toArray方法):

public <T> T[] toArray(T[] a){ }
//该方法,用来把集合元素存储到指定数据类型的数组中,返回已存储集合元素的数组

使用格式为:

调用方法时,确定泛型的类型

示例代码(Sting类型的ArrayList调用toArray方法):

ArrayList<String> list = new ArrayList<String>(); 
String[] arr = new String[100]; String[] result = list.toArray(arr); 

此时,变量T的值就是String类型。

public <String> String[] toArray(String[] a){ }

示例代码(Sting类型的ArrayList调用toArray方法):

ArrayList<String> list = new ArrayList<String>(); 
Integer[] arr = new Integer[100]; 
Integer [] result = list.toArray(arr); 

此时,变量T的值就是Integer类型。

public <Integer> Integer[] toArray(Integer[] a){ }
  • 含有泛型的接口

定义格式为:

修饰符 interface接口名<代表泛型的变量> { }

示例代码(API中的Iterator迭代器接口):

public interface Iterator<E> {
    public abstract E next();
}

使用格式为:

1. 定义类时确定泛型的类型

示例代码:

public final class Scanner implements Iterator<String> {
public String next(){ }
}

此时,变量E的值就是String类型。

2. 始终不确定泛型的类型,直到创建对象时,确定泛型的类型

示例代码:

ArrayList<String> list = new ArrayList<String>(); 
Iterator<String> it = list.iterator(); 

此时,变量E的值就是String类型。

public interface Iterator<String> {
    public abstract String next();
}

标签: none