【从零开始学习JAVA | 第二十六篇】泛型补充知识

目录

前言:

泛型的更多应用:

泛型类:

泛型方法:

泛型方法:

总结:


前言:

在上一篇文章中我们介绍了泛型的基础知识,也就是在创建集合的时候用到泛型,此时的泛型更多是约束作用,而这篇我们将要介绍一些泛型更多的知识,例如在类上应用泛型,在方法上应用泛型,在接口后面应用泛型。

泛型的更多应用:

泛型类:

使用场景:如果在一个类中,某个变量的数据类型不确定,就可以定义带有泛型的类。

泛型类是一种在编程中广泛使用的概念,它允许我们在定义类时使用类型参数来表示某种类型的未知。通过使用泛型类,我们可以编写更加灵活和可复用的代码,因为这些类可以适用于多种不同的数据类型。

泛型类的定义与普通类类似,只是在类名后面添加了一对尖括号(<>),其中包含一个或多个类型参数。类型参数可以是一个具体的类、接口或抽象类,用于代表实际传递给泛型类的数据类型。

下面是一个泛型类的简单示例:

public class Box<T> {
    private T value;

    public void setValue(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }
}

在上面的示例中,Box 类被定义为一个泛型类,使用了一个类型参数 T。这个类有一个成员变量 value,它的类型是 T。 setValue 方法可以接受任意类型的值,并将其赋给 value 变量。getValue 方法返回 value 的值。

使用泛型类时,我们可以指定具体的类型参数来创建对象,如下所示:

Box<Integer> integerBox = new Box<>();
integerBox.setValue(10);
int value = integerBox.getValue();
System.out.println(value); // 输出:10

Box<String> stringBox = new Box<>();
stringBox.setValue("Hello");
String str = stringBox.getValue();
System.out.println(str); // 输出:Hello

在上面的代码中,我们创建了两个 Box 对象,一个是 Box<Integer> 类型的,另一个是 Box<String> 类型的。通过指定类型参数,我们可以在运行时确定 value 的类型,并使用对应的操作。

泛型类还可以与其他泛型类或泛型接口一起使用,从而提供更大的灵活性和可扩展性。它们可以用于数据结构(如列表、栈、队列等)、算法实现以及各种通用工具类等场景中。

总结来说,泛型类是一种带有类型参数的类,它允许我们在代码编写中以一种通用的方式处理不同类型的数据。通过使用泛型类,我们可以提高代码的重用性和灵活性,使代码更加简洁、安全和可读。

泛型方法:

泛型方法是一种在编程中使用泛型的方法,它允许我们在方法内部使用类型参数来表示某种类型的未知。通过使用泛型方法,我们可以编写更加通用和灵活的代码,能够适用于不同类型的数据。

泛型方法的定义包括两个部分:方法签名类型参数声明。在方法签名中,我们使用一个类型参数来表示未知的类型,该类型参数放在方法的返回类型之前。类型参数可以是一个具体的类、接口或抽象类。

下面是一个泛型方法的简单示例:

public class Utils {
    public static <T> void printArray(T[] array) {
        for (T element : array) {
            System.out.println(element);
        }
    }
}

在上面的示例中,printArray 方法是一个泛型方法,使用了一个类型参数 T。该方法接受一个类型为 T 的数组,并遍历打印数组中的每个元素。

使用泛型方法时,我们可以在调用方法时显式地指定类型参数,也可以由编译器根据参数类型进行类型推断。示例如下:

Integer[] intArray = {1, 2, 3, 4, 5};
Utils.printArray(intArray); // 输出:1 2 3 4 5

String[] stringArray = {"Hello", "World"};
Utils.<String>printArray(stringArray); // 输出:Hello World

在上面的代码中,我们分别调用了 printArray 方法,并传递了不同类型的数组作为参数。第一个例子中,编译器根据参数类型推断出了 T 为 Integer 类型;而在第二个例子中,我们显式地指定了 T 为 String 类型。

泛型方法还可以有多个类型参数,并且可以使用类型通配符限定类型的范围,也可以在方法参数中使用类型参数。它们提供了更大的灵活性,可以应用于各种不同的场景。

总结来说,泛型方法是一种在方法内部使用类型参数的方法,它允许我们以一种通用的方式处理不同类型的数据。通过使用泛型方法,我们可以提高代码的通用性和灵活性,使代码更具可重用性,并且在编译时确保类型安全。

泛型方法:

泛型接口是一种接口,在接口定义中使用了类型参数来表示某种类型的未知。通过使用泛型接口,我们可以定义可以适用于不同类型的数据的通用接口,从而提高代码的可重用性和灵活性。

泛型接口的定义与普通接口类似,只是在接口名称后面添加了一对尖括号(<>),其中包含一个或多个类型参数。类型参数可以是一个具体的类、接口或抽象类,用于代表实际传递给泛型接口的数据类型。

下面是一个泛型接口的简单示例:

public interface List<T> {
    void add(T element);

    T get(int index);
}

在上面的示例中,List 接口被定义为一个泛型接口,使用了类型参数 `T`。该接口声明了两个方法:add 方法用于向列表中添加元素,get 方法用于获取列表中指定索引位置的元素。

使用泛型接口时,我们可以在实现接口的类或者使用接口的地方指定具体的类型参数。示例如下:

public class ArrayList<T> implements List<T> {
    private T[] array;
    private int size;

    public ArrayList(int capacity) {
        array = (T[]) new Object[capacity];
        size = 0;
    }

    public void add(T element) {
        array[size] = element;
        size++;
    }

    public T get(int index) {
        return array[index];
    }
}

在上面的代码中,ArrayList 类实现了 List 接口,并指定类型参数 T。在类的内部,我们使用了一个泛型数组 array 来存储元素,add 方法向数组中添加元素,get  方法获取指定索引位置的元素。

使用泛型接口的好处是,它可以使代码更加通用和灵活,从而适用于不同类型的数据。通过在实现类或使用地方指定类型参数,我们可以在运行时确定使用的具体数据类型。

泛型接口还可以与其他泛型类、泛型接口或泛型方法一起使用,可以作为方法的参数或返回类型,提供更大的灵活性和可扩展性。

总结来说,泛型接口是一种带有类型参数的接口,它允许我们以一种通用的方式处理不同类型的数据。通过使用泛型接口,我们可以提高代码的可重用性和灵活性,使代码更加简洁、安全和可读。

总结:

        我们这篇详细介绍了泛型的三个常见用途:泛型类,泛型方法,泛型接口。其实这里泛型的的作用都是暂定数据类型。使得代码更加具有复用性,大大提高了代码的效率,因此我们要熟练的使用这三个方法,更好的掌握泛型的意义。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

猜你喜欢

转载自blog.csdn.net/fckbb/article/details/131463904