Java - 泛型

Java - 泛型 首页 / Java入门教程 / Java - 泛型

Java泛型提供了编译时类型安全监测机制,该机制允许程序员在编译时监测非法的类型。使用泛型机制编写的程序代码要比那些杂乱地使用Object变量,然后再进行强制类型转换的代码具有更好的安全性和可读性。

泛型方法

您可以编写一个可以用不同类型的参数调用的通用方法声明。 根据传递给泛型方法的参数类型,编译器会适当地处理每个方法调用。 

public class GenericMethodTest {
   //通用方法 printArray
   public static < E > void printArray( E[] inputArray ) {
      //显示数组元素
      for(E element : inputArray) {
         System.out.printf("%s ", element);
      }
      System.out.println();
   }

   public static void main(String args[]) {
      //创建整数、双精度和字符数组
      Integer[] intArray = { 1, 2, 3, 4, 5 };
      Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
      Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };

      System.out.println("Array integerArray contains:");
      printArray(intArray);   //传递一个整数数组

      System.out.println("\nArray doubleArray contains:");
      printArray(doubleArray);   //传递一个 Double 数组

      System.out.println("\nArray characterArray contains:");
      printArray(charArray);   //传递一个字符数组
   }
}

这将产生以下输出-

链接:https://www.learnfk.comhttps://www.learnfk.com/java/java-generics.html

来源:LearnFk无涯教程网

Array integerArray contains:
1 2 3 4 5 

Array doubleArray contains:
1.1 2.2 3.3 4.4 

Array characterArray contains:
H E L L O

有界参数

有时您可能希望限制允许传递给类型参数的类型。例如,对Number进行操作的方法可能只希望接受Number或其子类的实例。这就是有界类型参数的用途。

若要声明有界类型参数,请列出类型参数的名称,后跟extensions关键字。

以下示例说明了extends在一般意义上是如何表示“ extends”(如在类中)或“ implements”(如在接口中)。 此示例是返回三个Comparable 对象中最大对象

public class MaximumTest {
   //确定三个 Comparable 对象中最大的一个
   
   public static <T extends Comparable<T>> T maximum(T x, T y, T z) {
      T max = x;   //假设 x 最初是最大的
      
      if(y.compareTo(max) > 0) {
         max = y;   //y 是迄今为止最大的
      }
      
      if(z.compareTo(max) > 0) {
         max = z;   //z现在是最大的         
      }
      return max;   //返回最大的对象
   }
   
   public static void main(String args[]) {
      System.out.printf("Max of %d, %d and %d is %d\n\n", 
         3, 4, 5, maximum( 3, 4, 5 ));

      System.out.printf("Max of %.1f,%.1f and %.1f is %.1f\n\n",
         6.6, 8.8, 7.7, maximum( 6.6, 8.8, 7.7 ));

      System.out.printf("Max of %s, %s and %s is %s\n","pear",
         "apple", "orange", maximum("pear", "apple", "orange"));
   }
}

这将产生以下输出-

链接:https://www.learnfk.comhttps://www.learnfk.com/java/java-generics.html

来源:LearnFk无涯教程网

Max of 3, 4 and 5 is 5

Max of 6.6,8.8 and 7.7 is 8.8

Max of pear, apple and orange is pear

泛型类

泛型类声明看起来与非泛型类声明类似,不同之处在于类名后跟类型参数部分。

以下示例说明了如何定义泛型类-

public class Box<T> {
   private T t;

   public void add(T t) {
      this.t = t;
   }

   public T get() {
      return t;
   }

   public static void main(String[] args) {
      Box<Integer> integerBox = new Box<Integer>();
      Box<String> stringBox = new Box<String>();
    
      integerBox.add(new Integer(10));
      stringBox.add(new String("Hello World"));

      System.out.printf("Integer Value :%d\n\n", integerBox.get());
      System.out.printf("String Value :%s\n", stringBox.get());
   }
}

这将产生以下输出-

链接:https://www.learnfk.comhttps://www.learnfk.com/java/java-generics.html

来源:LearnFk无涯教程网

Integer Value :10
String Value :Hello World

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

深入拆解Java虚拟机 -〔郑雨迪〕

分布式协议与算法实战 -〔韩健〕

TensorFlow 2项目进阶实战 -〔彭靖田〕

Redis核心技术与实战 -〔蒋德钧〕

如何落地业务建模 -〔徐昊〕

Kubernetes入门实战课 -〔罗剑锋〕

快手 · 移动端音视频开发实战 -〔展晓凯〕

AI绘画核心技术与实战 -〔南柯〕

结构执行力 -〔李忠秋〕

好记忆不如烂笔头。留下您的足迹吧 :)