亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

Java 泛型

Java 泛型

在本教程中,我们将通过示例了解 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;
  }
}

输出

Generic Class returns: 5
Generic Class returns: Java Programming

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

class GenericsClass<T> {...}

这里,T 在尖括号 <> 内使用 表示类型参数 . Main 内部 类,我们创建了 GenericsClass 的两个对象


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);
  }
}

输出

Generics Method:
Data Passed: Java Programming
Generics Method:
Data Passed: 25

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

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

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

我们可以通过放置实际类型<String>来调用泛型方法 和 <Integer> 在方法名称前的括号内。

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

demo.<Integer>genericMethod(25);

注意 :我们可以调用泛型方法而不包括类型参数。例如,

demo.genericsMethod("Java Programming");

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


有界类型

一般来说,类型参数 可以接受任何数据类型(原始类型除外)。

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

对于绑定类型,我们使用 extends 关键词。例如,

<T extends A>

这意味着 T 只能接受 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> 

这里,GenericsClass 是用有界类型创建的。这意味着 GenericsClass 只能使用 Number 的子数据类型 (Integer , Double ,等等)。

然而,我们用 String 创建了一个泛型类的对象 .在这种情况下,我们会得到以下错误。

GenericsClass<String> obj = new GenericsClass<>();
                                                 ^
    reason: inference variable T has incompatible bounds
      equality constraints: String
      lower bounds: Number
  where T is a type-variable:
    T extends Number declared in class GenericsClass

Java 泛型的优点

1。代码可重用性

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

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

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

2。编译时类型检查

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

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

在这里,我们知道 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

  1. Java final 关键字
  2. Java instanceof 运算符
  3. Java 继承
  4. Java 嵌套静态类
  5. Java 匿名类
  6. Java 单例类
  7. Java 反射
  8. Java ArrayList 类
  9. Java 堆栈类
  10. Java HashSet 类
  11. Java ObjectOutputStream 类
  12. Java 文件类