Java中泛型的基础学习

85 阅读2分钟

泛型

Java中的泛型是指在代码编写过程中,不指定具体的类型,在运行时再根据传递的参数确定具体的类型,从而实现代码的通用性和复用性。泛型可以应用于类、接口、方法等的定义中。

基础语法

Java中的泛型语法使用尖括号<>来定义泛型类型,在定义泛型类或接口时,在类名或接口名后面添加尖括号<>,其中可以定义一个或多个类型参数,类型参数可以是任意合法的标识符。

例如:

public class MyList<T> {  
    private T[] elements;  
  
    public T get(int index) {  
        return elements[index];  
    }  
  
    public void add(T element) {  
        // ...  
    }  
}  

这里,我们定义了一个泛型类 MyList,它有一个类型参数 T,用于表示列表中元素的类型。在这个类中,我们使用了泛型数组 T[] 来存储元素。同时,我们还定义了两个方法 get 和 add,它们分别用于获取和添加元素。

在实例化泛型类时,我们需要指定具体的类型参数。

例如:

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

这里我们实例化了一个 MyList 对象,并指定了类型参数为 String。这样,我们就可以往列表中添加字符串,并获取字符串了。

除了在类中定义泛型,我们还可以在方法中使用泛型。

例如:

public static <T> void printArray(T[] arr) {  
    for (T elem : arr) {  
        System.out.println(elem);  
    }  
}  

这里,我们定义了一个静态泛型方法 printArray,它接受一个泛型数组作为参数,并将数组中的元素依次打印出来。

使用时,我们需要在方法名前面的尖括号中指定类型参数:

String[] arr = {"Hello""World"};  
printArray(arr); 

这样就可以将数组中的元素打印出来了。

需要注意的地方

  1. 泛型只能使用引用类型,不能使用基本类型;
  2. 泛型类型参数只存在于代码编译期间,在运行时会被擦除;
  3. 泛型类型参数不能用于静态变量或静态方法;
  4. 泛型类不能直接继承Exception或Throwable类。

泛型类和泛型方法的代码示例

public class MyList<T> {  
    private T[] elements;  
    private int size;  
  
    public MyList() {  
        elements = (T[]) new Object[10];  
        size = 0;  
    }  
  
    public void add(T element) {  
        if (size < elements.length) {  
            elements[size] = element;  
            size++;  
        }  
    }  
  
    public T get(int index) {  
        if (index >= 0 && index < size) {  
            return elements[index];  
        } else {  
            throw new IndexOutOfBoundsException();  
        }  
    }  
  
    public static <T> void printArray(T[] array) {  
        for (T element : array) {  
            System.out.println(element);  
        }  
    }  
}  

可以看到,在MyList类中,使用T作为类型参数,表示可以接受任意类型的元素,然后使用T[]定义一个泛型数组,实现了一个简单的列表功能。同时,定义了一个静态的泛型方法printArray,可以打印任意类型的数组。