专注Java教育14年 全国咨询/投诉热线:444-1124-454
星辉LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 Java泛型的使用介绍及示例

Java泛型的使用介绍及示例

更新时间:2022-12-02 11:17:10 来源:星辉 浏览766次

在本教程中,我们将通过示例了解 Java 泛型、如何创建泛型类和方法及其优势。

Java 泛型允许我们创建可用于不同类型数据(对象)的单个类、接口和方法。

这有助于我们重用我们的代码。

注意:泛型不适用于原始类型(int, float,char等)。

Java泛型类

我们可以创建一个可用于任何类型数据的类。这样的类称为泛型类。

以下是我们如何在 Java 中创建泛型类:

示例:创建泛型类

class Main {
  public static void main(String[] args) {
    // initialize generic class
    // with Integer data
    GenericsClass<Integer> intObj = new GenericsClass<>(5);
    System.out.println("Generic Class returns: " + intObj.getData());
    // initialize generic class
    // with String data
    GenericsClass<String> stringObj = new GenericsClass<>("Java Programming");
    System.out.println("Generic Class returns: " + stringObj.getData());
  }
}
// create a generics class
class GenericsClass<T> {
  // variable of T type
  private T data;
  public GenericsClass(T data) {
    this.data = data;
  }
  // method that return T type variable
  public T getData() {
    return this.data;
  }
}

输出

通用类返回:5
通用类返回:Java 编程

在上面的示例中,我们创建了一个名为泛型类. 此类可用于处理任何类型的数据。

class GenericsClass<T> {...}

这里,吨尖括号内使用的<>表示类型参数。在Main类内部,我们创建了两个对象泛型类整型对象- 在这里,类型参数吨替换为Integer. 现在泛型类适用于整数数据。

字符串对象- 在这里,类型参数吨替换为String. 现在泛型类适用于字符串数据。

Java泛型方法

与泛型类类似,我们也可以创建一个可用于任何类型数据的方法。这样的类称为泛型方法。

以下是我们如何在 Java 中创建泛型方法:

示例:创建泛型方法

class Main {
  public static void main(String[] args) {
    // initialize the class with Integer data
    DemoClass demo = new DemoClass();
    // generics method working with String
    demo.<String>genericsMethod("Java Programming");
    // generics method working with integer
    demo.<Integer>genericsMethod(25);
  }
}
class DemoClass {
  // creae a generics method
  public <T> void genericsMethod(T data) {
    System.out.println("Generics Method:");
    System.out.println("Data Passed: " + data);
  }
}

输出

泛型方法:
传递的数据:Java 编程
泛型方法:
通过的数据:25

在上面的示例中,我们创建了一个名为泛型方法.

public <T> void genericMethod(T data) {...}

在这里,类型参数<T>插入在修饰符之后public和返回类型之前void。

我们可以通过将实际类型和放在方法名称之前的括号内来调用泛型方法。

demo.<String>genericMethod("Java Programming");
demo.<Integer>genericMethod(25);

注意:我们可以在不包含类型参数的情况下调用泛型方法。例如,

demo.genericsMethod("Java Programming");

在这种情况下,编译器可以根据传递给方法的值来匹配类型参数。

有界类型

通常,类型参数可以接受任何数据类型(原始类型除外)。

但是,如果我们只想对某些特定类型(例如接受数字类型的数据)使用泛型,那么我们可以使用有界类型。

在绑定类型的情况下,我们使用extends关键字。例如,

<T extends A>

这表示吨只能接受子类型的数据一个.

示例:有界类型

class GenericsClass <T extends Number> {
  public void display() {
    System.out.println("This is a bounded type generics class.");
  }
}
class Main {
  public static void main(String[] args) {
    // create an object of GenericsClass
    GenericsClass<String> obj = new GenericsClass<>();
  }
}

在上面的示例中,我们创建了一个名为 GenericsClass 的类。注意表情,注意表情

<T extends Number> 

这里,泛型类是用有界类型创建的。这表示泛型类只能使用Number( Integer, Double, 等等) 的子数据类型。

但是,我们已经创建了泛型类的对象String。在这种情况下,我们会得到以下错误。

GenericsClass<String> obj = new GenericsClass<>();                                                ^
    原因:推理变量 T 具有不兼容的边界
      等式约束:字符串
      下限:数字
  其中 T 是类型变量:
    T 扩展了类 GenericsClass 中声明的 Number

Java泛型的优点

1. 代码复用性

借助 Java 中的泛型,我们可以编写适用于不同类型数据的代码。例如,

public <T> void genericsMethod(T data) {...}

在这里,我们创建了一个泛型方法。同样的方法可用于对整数数据、字符串数据等执行操作。

2.编译时类型检查

泛型的类型参数提供有关泛型代码中使用的数据类型的信息。例如,

// using Generics
GenericsClass<Integer> list = new GenericsClass<>();

在这里,我们知道泛型类仅处理Integer数据。

现在,如果我们试图将 Integer 以外的数据传递给此类,程序将在编译时产生错误。

3.与集合一起使用

集合框架使用 Java 中的泛型概念。例如,

// creating a string type ArrayList
ArrayList<String> list1 = new ArrayList<>();
// creating a integer type ArrayList
ArrayList<Integer> list2 = new ArrayList<>();

在上面的示例中,我们使用了相同的ArrayList 类来处理不同类型的数据。与类似ArrayList,其他集合(LinkedList、Queue、Maps等)在 Java 中也是通用的。如果您想了解更多相关知识,不妨来关注一下本站的Java基础教程技术文档,里面还有更丰富的知识等着大家去学习,希望对大家能够有所帮助哦。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>