try-with-resource语句可以推断λ的类型。
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(文字列);为什么?
发布于 2017-06-28 09:44:00
Try-with-resorce可以推断,因为您已经声明了预期的结果类型:
try (Closeable 最後に実行 = () -> System.out.print("終了")) {
^^^^^^^^^Javac从变量赋值中知道应该将这个lambda转换为Closeable的目标类型。然而,在enhanced for中没有这样的目标类型信息。可能有多个目标类型:
course
public interface StringIterable extends Iterable<String>
public interface WeridIterable extends Iterable<String>
的
Iterable<String>有任意数量的可能目标类型,因此您必须使用(Iterable<String>)显式地指定它,就像您在尝试使用资源的情况下所做的那样。
https://stackoverflow.com/questions/44792342
复制相似问题