相关疑难解决方法(0)

Java下界通配符

我正在努力解决这个问题,并且想知道是否有人可以解释原因.

我有三个班:员工,人和天使.

员工延伸人和人延伸天使.

当我尝试执行此代码时

class Angel {}
class Person extends Angel {}
class Employee extends Person {}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

在类型List中添加(捕获#5-of?super Person)的方法不适用于参数(Angel)

我一直在阅读文档<? super X >意味着任何类型的X或X的超类(所以在我的情况下,Angel是Person的超类)并且应该被允许?显然不是!

有没有人有任何简单的例子?

java wildcard

15
推荐指数
2
解决办法
4946
查看次数

与lambda和Functional Interface一起使用时理解下限的问题

在研究Java8 Streams时,我遇到了以下代码片段:

Predicate<? super String> predicate = s -> s.startsWith("g");
Run Code Online (Sandbox Code Playgroud)

由于泛型参数是下限,我认为这不会编译.我看到它的方式,如果一个Object是String的超类型,那么传入一个Object类型应该会破坏它,因为Object没有startsWith()函数.但是,我很惊讶地看到它没有任何问题.

更进一步,当我调整谓词采取上限:

<? extends String>,
Run Code Online (Sandbox Code Playgroud)

它不会编译.

我以为我理解了上限和下限的含义,但显然,我错过了一些东西.任何人都可以帮助解释为什么下限与这个lambda一起工作?

java generics lambda predicate java-8

15
推荐指数
2
解决办法
850
查看次数

标签 统计

java ×2

generics ×1

java-8 ×1

lambda ×1

predicate ×1

wildcard ×1