gpt4 book ai didi

java - 为什么增强型 for 语句无法推断 lambda 的类型?

转载 作者:行者123 更新时间:2023-12-01 17:34:13 24 4
gpt4 key购买 nike

try-with-resource语句可以推断lambda的类型。

try (Closeable 最後に実行 = () -> System.out.print("終了")) {
System.out.println("開始");
}

但是 enhanced-for 语句不能。

Iterator<String> 繰り返し = Arrays.asList("いち", "に", "さん").iterator();
for (String 文字列 : () -> 繰り返し) // compile error!
System.out.println(文字列);

我们必须这样写。

Iterator<String> 繰り返し = Arrays.asList("いち", "に", "さん").iterator();
for (String 文字列 : (Iterable<String>)() -> 繰り返し)
System.out.println(文字列);

为什么?

最佳答案

Try-with-resorce 可以推断,因为您已经声明了预期的结果类型:

try (Closeable 最後に実行 = () -> System.out.print("終了")) {
^^^^^^^^^

Javac 从该变量赋值中知道目标类型,该 lambda 应转换为 Closeable 。然而在增强型中没有这样的目标类型信息。可能有多个目标类型:

  • Iterable<String>当然
  • public interface StringIterable extends Iterable<String>
  • public interface WeridIterable extends Iterable<String>
  • ...

可能的目标类型有任意数量,因此您必须使用 (Iterable<String>) 显式给出它,就像您在 try-with-resource 案例中所做的那样。

关于java - 为什么增强型 for 语句无法推断 lambda 的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44792342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com