本文概述
类型推断是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类型推断示例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
评论前必须登录!
注册