我想知道为什么这段代码甚至会编译。因为我们所拥有的是Predicate
,其类型可以是 String或其任何超类型。显然,length()
在Object class 中不可用,它适用于此谓词。
Predicate<? super String> predicate = s -> s.length() > 3;
Stream.of("cat", "bat", "rat", "doggy").filter(predicate).forEach(System.out::println);
任何人都可以描述我们必须需要这种类型的有界类型谓词吗?