我有一段代码,其中一个接口有一个可选的返回方法,实现它的一些类返回一些东西,其他的没有。
在努力拥抱这个辉煌的“空杀器”的过程中,下面是我尝试过的:
public interface Gun {
public Optional<Bullet> shoot();
}
public class Pistol implements Gun{
@Override
public Optional<Bullet> shoot(){
return Optional.of(this.magazine.remove(0));
}//never mind the check of magazine content
}
public class Bow implements Gun{
@Override
public Optional<Bullet> shoot(){
quill--;
return Optional.empty();
}
}
public class BallisticGelPuddy{
private Gun[] guns = new Gun[]{new Pistol(),new Bow()};
private List<Bullet> bullets = new ArrayList<>();
public void collectBullets(){
//here is the problem
for(Gun gun : guns)
gun.shoot.ifPresent(bullets.add( <the return I got with the method>)
}}
附注。如果(X!=null)不能做,Optional有没有真正的用处?
我明白你的意思了--当一个射弹(可能是一个比bullet
更好的类名)穿过ballisticgelpuddy
时,它要么被卡住,要么不被卡住。如果它卡住了,它就会在ballisticgelpuddy
中累积。
如果我们使用null
检查,让我们重写代码:
for(Gun gun: guns) {
final Bullet bullet = gun.shoot();
if(bullet != null) {
bullets.add(bullet);
}
}
很直截了当吧?如果它存在,我们想把它加进去。
for(Gun gun: guns) {
gun.shoot().ifPresent(bullets::add);
}
在这个场景中,这两种方法实际上没有区别,因为您总是要检查是否存在。optional
用于防止在处理null
时出错,并允许您表达更流畅的调用链,但要考虑在此场景中使用optional
的实用性。对这个案子来说似乎并不完全必要。
我试图模拟一个对象,该对象返回一个带有Mockito的Java可选对象: 当被调用,它返回。 我希望方法返回 返回的任何原因? 方法如下: 以下是Junit:
我喜欢现在Java标准库中的选项。但有一个基本问题我一直碰到,但我还没想好如何用最好的(最容易读懂、最漂亮、最短的)方法解决: 当选项为空时如何从方法返回? 如果可选项为空,我如何从方法返回,而不必在方法的其余部分中使用,也不必声明额外的变量和额外的块嵌套级别? 或者如果不可能得到所有这些,那么处理这种情况的最佳方法是什么?
我想选择一组行并将它们返回给客户端,但我也想将结果集中的主键(整数id)插入到临时表中,以便在同一事务的稍后连接中使用。 这适用于同步,其中后续查询往往涉及对早期查询结果的联接。 最有效的方法是什么? 我不愿执行两次查询,尽管如果将其添加到查询缓存中可能会很快。另一种选择是将整个结果集存储到临时表中,然后从临时表中进行选择。这似乎也很浪费(我只需要临时表中的整数id。)如果有一个SELECT IN
我想做这样的东西: 这将不起作用,因为ifPresent将使用者函数接口作为参数,它具有void accept(t)。它不能返回任何值。还有别的办法吗?
你好,我有一个问题与elasticsearch php api,Elastica。 如果我运行这个: 我得到0个结果
问题内容: 我有2张桌子- : 第二张桌子- : 我只需要选择未取消的预订(在此示例中仅为ID 3)。我可以轻松地选择带有简单条件的已取消,但由于未在此处取消工作,因此我在努力避免未取消。 问题答案: 要么: 第一个版本更直观,但是我认为第二个版本通常可以获得更好的性能(假设您在联接中使用的列上有索引)。 第二个版本有效,因为返回第一个表中所有行的一行。当条件成功,这些行会包括从第二表中的列,就像