之前对于Java的泛型很不熟练,特别是在别的源码中看到泛型简直一头雾水,所以想借助 OpenChat AI 来加深一下印象。

在实际编码过程中,接触到泛型方法肯定比泛型类多得多,毕竟各种各样的方法才是程序的主体。

什么是泛型方法

A generic method in Java is a method that is declared with a type parameter and can operate on objects of various types. The type parameter acts as a placeholder for a specific type that will be specified when the method is called. This allows the same method to be used with objects of different types, making the code more reusable and flexible.

简而言之,泛型方法是用类型参数声明的方法。普通参数就是普通方法,类型参数就是泛型方法。

那么什么是类型参数呢?

在 Java 中,由<>包围的字符,就是类型参数的声明,并且放置在一个方法(method)返回类型之前。例如以下函数:

public static <T> int indexOf(T[] arr, T elm) {
    // do something
}

当调用该方法时,T的类型是从作为参数传入的元素的类型中推断出来的。

<> 中间除了普通的 Java 类,还可以有通配符:E, T, K, V, N, ? 。 或者其它不容易混淆的字符。

  • E (Element) 代表 Element,在集合中使用,因为集合中存放的是元素
  • T (Type) 表示具体的一个 Java 类
  • K & V (key value) 分别代表 Java 键值中的 Key Value
  • N (Number) 表示数值类型
  • ? 表示不确定的 Java 类型

另外,<T>T[] arrT elm中的三个T在具体执行是应当保持一致。如以下:

indexOf(new Integer[]{1, 3, 5}, 10)

T 就表示 Integer

indexOf(new String[]{"hello", "三体", "你好", "三体"})

T 就表示 String

多个参数

与泛型类一样,类型参数可以有多个,以逗号分隔,比如:

public static <U, V> Pair<U, V> makePair (U first, V second) {
    Pair<U, V> pair = new Pair<>(first, second);
    return pair;
}

实际调用:

Pair<String, Integer> pair1 = makePair("Hello", 42);
Pair<Double, Character> pair2 = makePair(3.14, 'x');

Generated by OpenChat?

标签: none

评论已关闭