举报投诉联系我们 手机版 热门标签 名动网
您的位置:名动网 > java 类型推断 Java Lambda类型推断

java 类型推断 Java Lambda类型推断

2023-05-01 06:20 Java教程

java 类型推断 Java Lambda类型推断

java 类型推断

Java 类型推断是 Java 8 中引入的一种新特性,它可以让程序员在不显式声明变量类型的情况下,让编译器自动推断出变量的类型。这样可以减少代码量,提高代码的可读性,使得代码更加优雅。

Java 类型推断主要有三个场景:Lambda 表达式、泛型方法、try-with-resources 语句。

// Lambda 表达式
Runnable r = () -> System.out.println("Hello World");  // 无需显式声明 Runnable 类型
 
// 泛型方法
List<String> list = Arrays.asList("a", "b", "c");  // 无需显式声明 List<String> 类型
 
// try-with-resources 语句
try (BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {  // 无需显式声明 BufferedReader 类型   }   catch (IOException e) {   }    

Java Lambda类型推断

Java Lambda类型推断


lambda表达式表示函数接口的实例。

根据上下文,一个lambda表达式可以映射到不同的函数接口类型。

编译器推断lambda表达式的类型。

例子

在下面的代码中有两个函数接口, Processor SecondProcessor

Processor 有一个名为 getStringLength 的方法,它接受一个字符串作为参数,并返回 int

SecondProcessor 有一个名为 noName 的方法,它接受一个字符串作为参数,并返回一个 int

从代码中,我们可以看到,我们可以为它们分配两个相同的lambda表达式。

public class Main {
  public static void main(String[] argv) {
    Processor stringProcessor = (String str) -> str.length();
    SecondProcessor secondProcessor = (String str) -> str.length();
    //stringProcessor = secondProcessor; //compile error
    String name = "Java Lambda";
    int length = stringProcessor.getStringLength(name);
    System.out.println(length);

  }
}

@FunctionalInterface
interface Processor {
  int getStringLength(String str);
}

@FunctionalInterface
interface SecondProcessor {
  int noName(String str);
}

上面的代码生成以下结果。



注意

Processor SecondProcessor 称为目标类型。

推断lambda表达式类型的过程称为目标类型。

编译器使用以下规则来确定lambda表达式是否可分配给其目标类型:

  • 它必须是一个函数接口。
  • lambda表达式的参数必须与函数接口中的抽象方法匹配。
  • lambda表达式的返回类型与函数接口中抽象方法的返回类型兼容。
  • 从lambda表达式抛出的检查异常必须与函数接口中抽象方法的已声明的throws子句兼容。


阅读全文
以上是名动网为你收集整理的java 类型推断 Java Lambda类型推断全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 名动网 mdwl.vip 版权所有 联系我们