最有可能的原因是允许使用者
类型大于t
(与t
兼容的类型)的使用者
参数使用。
这里有一个例子:
Optional<String> opt = Optional.of("abc");
Optional<Integer> intOptional = Optional.of(2);
Consumer<Object> printConsumer = System.out::println;
opt.ifPresent(printConsumer);
intOptional.ifPresent(printConsumer);
PrintConsumer
只是一个打印对象的函数。因此,它可以同时使用string
和integer
类型。
问题内容: 最近,我与队友讨论了 在方法中使用可选参数的问题。 假设方法是 接受一个和 可选参数 ,它返回该目录中列出的书籍,如果还传递了类别,则仅返回该类别中的书籍。 冲突点是,验证是否为空检查。我认为不应对此进行空检查,因为它是可选参数。函数的调用者可以通过或,并且函数应在实现中处理两种情况。 我的意见是,对于可选参数,只会使方法的约定更加明确。只需查看方法签名即可知道此参数是可选的,不需要读
最近,我和我的队友讨论了在方法中使用作为可选参数。 假设方法是 我的观点是,对于可选参数,只会使方法的契约更加清晰。只要看一下方法签名就可以知道这个参数是可选的,不需要读取JavaDocs。但当他不想使用该可选参数时,不应强制他传递。 我的队友有不同的看法。他希望对其进行空检查,从而强制调用方始终传递。他的观点是为什么我们要通过一个空的可选选项。此外,看起来比更易读。 这个方法在我们的一个库包中,
我想知道为什么在Java8API上,可选类有
在使用来自Java背景的Swift时,为什么要选择结构而不是类呢?似乎它们是一样的,结构提供的功能较少。那为什么选择它呢?
为什么Java中的方法将作为参数,而不是?这是一个问题,我找到的最好的答案是在这里,说明 这里最重要的概念是,通过提供方法引用(或函数),可以懒惰地初始化它。如果不需要,则不需要创建异常对象。只在你需要的时候创建它。 但我还是不明白。为什么对象创建不能是懒惰的?
对于我的具体情况,我想在约简中使用函数合成;例如: 这有一个编译错误: 相反,我需要做的是: 但是,这就失去了composition提供的无点样式。 为什么流API是这样设计的?是,所以用超类型声明方法的参数不是更有意义吗?