Java8 类型推断
精华
小牛编辑
129浏览
2023-03-14
1 Java8 类型推断的介绍
类型推断是Java的一项功能,它使编译器可以查看每个方法调用和相应的声明以确定参数的类型。
Java在Java 8中提供了类型推断的改进版本。
1.1 Java8以前
List<Integer> list = new ArrayList<Integer>();
在下面的声明中,我们在一侧提到了arraylist的类型。这种方法是在Java 7中引入的。在这里,您可以将第二面留为<>,并且编译器将通过引用变量的类型来推断其类型。
List<Integer> list2 = new ArrayList<>();
1.2 Java8以后
在Java 8中,您可以调用专用方法而无需明确提及参数的类型。
showList(new ArrayList<>());
2 Java8 类型推断的案例1
您可以对通用类和方法使用类型推断。
/**
* 小牛知识库网: https://www.xnip.cn
*/
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
您还可以创建自己的自定义通用类和方法。在下面的示例中,我们将创建自己的泛型类和方法。
3 Java8 类型推断的案例2
/**
* 小牛知识库网: https://www.xnip.cn
*/
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