📌  相关文章
📜  Java中的尖括号<>与示例(1)

📅  最后修改于: 2023-12-03 15:16:32.518000             🧑  作者: Mango

Java中的尖括号 < >

在Java中,尖括号 < > 用于定义泛型类型、泛型方法或者通配符类型。可以说泛型是Java编程语言中最强大的特性之一。它可以让你写出更加通用、可重用的代码,减少代码的重复性,提高代码的可读性和安全性。

泛型类型

在Java中,泛型类型就是指具有类型参数的类或接口。其中类型参数用尖括号 < > 括起来,类型参数可以是任意有效的Java标识符,但通常使用单个大写字母来表示。例如:

class MyList<T> {
    private T[] arr;
    ...
}

上面的代码中,MyList 类具有一个类型参数 T,它表示列表中所存储的元素的类型。这个类型参数将在实例化 MyList 类的时候被指定为具体类型。

泛型方法

泛型方法就是指具有泛型类型参数的方法。在Java中,泛型方法和普通方法的语法非常相似,它们都使用尖括号 < > 来定义类型参数。例如:

class MyUtils {
   public static <T> T getFirst(T[] arr) {
      if (arr == null || arr.length == 0) {
         return null;
      }
      return arr[0];
   }
}

上面的代码中,getFirst 方法具有一个类型参数 T,它表示方法返回值的类型。当调用 getFirst 方法时,编译器会根据实参的类型推断出类型参数的具体值。

通配符类型

通配符类型是一种特殊的泛型类型,它可以表示一组类型的统一。在Java中,通配符类型使用问号 ? 表示,例如:

class MyList<T> {
    public void addAll(Collection<? extends T> c) {
        for (T elem : c) {
            this.add(elem);
        }
    }
}

上面的代码中,addAll 方法接收一个参数 c,它表示一个集合,集合中的元素类型是 TT 的子类。例如,如果 TNumber 类型,那么集合中的元素可以是 IntegerDoubleLong 等等。使用通配符类型可以让 addAll 方法更加灵活,可以接收更多不同类型的集合作为参数。

示例

下面是一个简单的示例程序,展示了如何使用泛型来定义类、方法和接口:

public class App {

   public static void main(String[] args) {

      MyList<String> strList = new MyList<>();
      strList.add("hello");
      strList.add("world");
      System.out.println(strList);

      MyList<Integer> intList = new MyList<>();
      intList.add(1);
      intList.add(2);
      System.out.println(intList);

      String firstStr = MyUtils.getFirst(new String[] {"hello", "world"});
      System.out.println(firstStr);

      Integer firstInt = MyUtils.getFirst(new Integer[] {1, 2, 3});
      System.out.println(firstInt);
   }

   interface MyList<T> {
      void add(T elem);
      String toString();
   }

   static class MyUtils {
      public static <T> T getFirst(T[] arr) {
         if (arr == null || arr.length == 0) {
            return null;
         }
         return arr[0];
      }
   }
}

上面的代码中,定义了一个 MyList 接口和一个 MyUtils 类。MyList 接口具有一个类型参数 T,它表示列表中所存储的元素的类型。MyUtils 类具有一个泛型方法 getFirst,它接收一个泛型数组类型的参数,并返回数组中的第一个元素。在 main 方法中,分别演示了如何使用 MyList 接口和 MyUtils 类。