我正在尝试实现搜索功能。如果找到匹配的元素,该函数将返回Prestamo类型的对象。如果没有找到任何内容,该函数不应该返回任何内容,但是我(当然)会抱怨错误的返回语句。这种问题是如何解决的?我想Try-catch可能是我的朋友,但我很难理解这种语法。
这是我的代码:
public Prestamo buscarPrestamoPorUUID(UUID idPrestamo, ArrayList<Prestamo> listaBuscar) {
Iterator<Prestamo> it = listaBuscar.iterator();
Prestamo esteElemento;
while (it.hasNext()) {
esteElemento = it.next();
if (esteElemento.getActivo() && esteElemento.getIdPrestamo().equals(idPrestamo)) {
return esteElemento;
}
}
}
答案 0 :(得分:0)
如果找不到匹配项,您可以让它返回null。这将需要buscarPrestamoPorUUID()方法的调用者对null进行测试,并使用try / catch或其他方式来处理它。即:
Prestamo test = buscarPrestamoPorUUID(someID, someList);
if(test == null)
{ /* handle no match found */ }
else
{ /* handle result found */ }
答案 1 :(得分:0)
在Java中,对方法的控制必须以两种方式之一结束:
return
语句,它返回方法签名中声明的类型的对象OR null 要解决编译错误,您需要执行其中一个错误。如果你想做前者,它可能看起来像这样:
public Prestamo buscarPrestamoPorUUID(UUID idPrestamo, ArrayList<Prestamo> listaBuscar) {
Iterator<Prestamo> it = listaBuscar.iterator();
Prestamo esteElemento;
while (it.hasNext()) {
esteElemento = it.next();
if (esteElemento.getActivo() && esteElemento.getIdPrestamo().equals(idPrestamo)) {
return esteElemento;
}
}
return null;
}
请确保调用此方法的逻辑已准备好处理null。
如果你想做第二次,你会做这样的事情:
public Prestamo buscarPrestamoPorUUID(UUID idPrestamo, ArrayList<Prestamo> listaBuscar) {
Iterator<Prestamo> it = listaBuscar.iterator();
Prestamo esteElemento;
while (it.hasNext()) {
esteElemento = it.next();
if (esteElemento.getActivo() && esteElemento.getIdPrestamo().equals(idPrestamo)) {
return esteElemento;
}
}
throw new RuntimeException("Didn't find an entity with the provided UUID!");
}
我个人更喜欢前者和后者。它完全有效地使用了null,它使得该方法比不必担心未捕获的异常更容易使用。无论如何,请注意这两种实现最终如何达到return
或throw
语句。这就是编译器检查的内容。
(P.S。:为了清晰代码,你可以用for-each循环替换你的while循环。)