📜  Java8 类型推断

📅  最后修改于: 2020-10-13 03:35:35             🧑  作者: Mango

Java类型推断

类型推断是Java的一项功能,它使编译器能够查看每个方法调用和相应的声明以确定参数的类型。

Java在Java 8中提供了类型推断的改进版本。以下示例说明了如何在代码中使用类型推断:

在这里,我们通过在两边都明确提到整数类型来创建arraylist。以下方法用于Java的早期版本。

List list = new ArrayList();

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

List list2 = new ArrayList<>(); 

改进的类型推断

在Java 8中,您可以调用专用方法而无需明确提及参数的类型。

showList(new ArrayList<>());

Java类型推断示例

您可以对通用类和方法使用类型推断。

import java.util.ArrayList;
import java.util.List;
public class TypeInferenceExample {
public static void showList(Listlist){
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 list1 = new ArrayList();
list1.add(11);
showList(list1);
// Java 7  
List 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类型推断示例2

class GenericClass {
  X name;
public void setName(X name){
this.name = name;
  }
public X getName(){
returnname;
  }
public String genericMethod(GenericClass x){
x.setName("John");
returnx.name;
  }
}

public class TypeInferenceExample {
public static void main(String[] args) {
GenericClass genericClass = new GenericClass();
genericClass.setName("Peter");
System.out.println(genericClass.getName());

GenericClass 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