[英]java handle return exception
以下代码应该返回arraylist中的最后一个值,如果它有一个,如果没有,我怎么能返回异常?
public int getLast() {
try {
return arrl.get(arrl.size() - 1);
} catch (Exception e) {
System.out.println("Caught "+ e);
}
}
这里的arrl是ArrayList
我执行了上面的代码并收到“错误:缺少返回声明”
你在try{}
有return语句,但在catch(){}
却没有,这给你一个例外。 您可以在两者中包含退货或在try catch之后返回。
public int getLast() {
Object o=null;
try {
o=arrl.get(arrl.size() - 1);
} catch (Exception e) {
System.out.println("Caught "+ e);
}
return o;
}
另外,要将异常返回给调用者,您需要从方法中重新抛出它,或者根本不捕获它
catch (Exception e) {
System.out.println("Caught "+ e);
throw e;
}
要么
public int getLast() {
return arrl.get(arrl.size() - 1);
}
但我怀疑除了IndexOutOfBoundsException
之外, IndexOutOfBoundsException
从此语句中抛出任何异常
你没有返回异常..你把它扔回调用者。
public int getLast() {
try {
return arrl.get(arrl.size() - 1);
} catch (Exception e) {
System.out.println("Caught "+ e);
throw e;
}
}
您的代码会给您编译错误,因为您没有在catch块中返回任何内容。 投掷会很好。
或者,不要捕获它,任何未捕获的异常将自动返回给调用者。 所以下面的代码也会将异常抛回到调用方法。
public int getLast() throws Exception {
return arrl.get(arrl.size() - 1);
}
这里的try/catch
块确实没有充分的理由。 只需将NPE或AIOOBE抛给调用者并让他处理它们。
您收到此错误,因为如果try
-part中的第一个return
不起作用,则编译器不知道应该返回什么。 您需要在catch
-part中进行另一次return
或异常重新抛出:
public int getLast() {
try {
return arrl.get(arrl.size() - 1);
} catch (Exception e) {
System.out.println("Caught "+ e);
// You need to return something here or rethrow the e...
}
// or return something here.
}
......但是这种逻辑无论如何都是坏的,这个函数根本不应该抛出异常。 在获取最后一个之前,我最好检查一下数组是否有任何项目。 如果在循环中运行它,如果经常抛出错误,性能可能会非常糟糕。
public int getLast() {
if (arrl != null && arrl.size() > 0) {
return arrl.get(arrl.size() - 1);
}
else {
return -1;
}
}
要么
public Integer getLast() {
if (arrl != null && arrl.size() > 0) {
return arrl.get(arrl.size() - 1);
}
else {
return null;
}
}
在这种情况下,可能引发的唯一异常是NPE,因为arrl为null,如果列表为空则为索引错误。 如果该类正确初始化,则NPE根本不应发生。 另一个例外是客户端错误,可能会传递给调用者。 或者,可以考虑返回null(在将int更改为Integer之后):
public Integer getLast() {
try {
return arrl.get(arrl.size() - 1);
} catch (IndexOutOfBoundsException ioobe) {
return null;
}
}
您的方法可能无法返回值(出于什么原因)。 在这种情况下,您应该使用java.lang.Optional(Java-8)作为返回类型:
public Optional<Integer> getLast() {
try {
return Optional<T>.ofNullable(arrl.get(arrl.size() - 1));
} catch (Exception e) {
e.printStackTrace();
return Optional.empty();
}
}
这样,您将强制方法的用户处理没有返回结果的情况。 (顺便说一句:你不应该捕获异常,大多数情况下都不会。请注意arrl不为null且arrl.size()在限制范围内。处理异常是针对... umm例外情况,不能用作控制语句。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.