个性化阅读
专注于IT技术分析

Java类型推断

本文概述

类型推断是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
赞(0)
未经允许不得转载:srcmini » Java类型推断

评论 抢沙发

评论前必须登录!