📅  最后修改于: 2020-10-13 03:35:35             🧑  作者: Mango
类型推断是Java的一项功能,它使编译器能够查看每个方法调用和相应的声明以确定参数的类型。
Java在Java 8中提供了类型推断的改进版本。以下示例说明了如何在代码中使用类型推断:
在这里,我们通过在两边都明确提到整数类型来创建arraylist。以下方法用于Java的早期版本。
List list = new ArrayList();
在下面的声明中,我们在一侧提到了arraylist的类型。这种方法是在Java 7中引入的。在这里,您可以将第二面留为空白菱形,并且编译器将通过引用变量的类型来推断其类型。
List list2 = new ArrayList<>();
在Java 8中,您可以调用专用方法而无需明确提及参数的类型。
showList(new ArrayList<>());
您可以对通用类和方法使用类型推断。
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
您还可以创建自己的自定义通用类和方法。在下面的示例中,我们将创建自己的通用类和方法。
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