Java类型推断

本文概述

  • Java类型推断示例
  • Java类型推断示例2
类型推断是Java的一项功能, 它使编译器可以查看每个方法调用和相应的声明以确定参数类型。
Java在Java 8中提供了类型推断的改进版本。以下示例说明了如何在代码中使用类型推断:
在这里, 我们通过在两边都明确提到整数类型来创建arraylist。以下方法用于Java的早期版本。
List< Integer> list = new ArrayList< Integer> ();

在下面的声明中, 我们在一侧提到了arraylist的类型。这种方法是在Java 7中引入的。在这里, 你可以将第二面留为空白菱形, 并且编译器将通过引用变量的类型来推断其类型。
List< Integer> list2 = new ArrayList< > ();

改进的类型推断
在Java 8中, 你可以调用专用方法而无需明确提及参数的类型。
showList(new ArrayList< > ());

Java类型推断示例你可以对通用类和方法使用类型推断。
import java.util.ArrayList; import java.util.List; public class TypeInferenceExample { public static void showList(List< Integer> list){ if(!list.isEmpty()){ list.forEach(System.out::println); }else System.out.println("list is empty"); } public static void main(String[] args) { // An old approach(prior to Java 7) to create a list List< Integer> list1 = new ArrayList< Integer> (); list1.add(11); showList(list1); // Java 7 List< Integer> list2 = new ArrayList< > (); // You can left it blank, compiler can infer type list2.add(12); showList(list2); // Compiler infers type of ArrayList, in Java 8 showList(new ArrayList< > ()); } }

输出:
11 12 list is empty

【Java类型推断】你还可以创建自己的自定义通用类和方法。在下面的示例中, 我们将创建自己的通用类和方法。
Java类型推断示例2
class GenericClass< X> { X name; public void setName(X name){ this.name = name; } public X getName(){ returnname; } public String genericMethod(GenericClass< String> x){ x.setName("John"); returnx.name; } }public class TypeInferenceExample { public static void main(String[] args) { GenericClass< String> genericClass = new GenericClass< String> (); genericClass.setName("Peter"); System.out.println(genericClass.getName()); GenericClass< String> genericClass2 = new GenericClass< > (); genericClass2.setName("peter"); System.out.println(genericClass2.getName()); // New improved type inference System.out.println(genericClass2.genericMethod(new GenericClass< > ())); } }

输出:
Peter peter John

    推荐阅读