Java 是否可以阻止try-catch返回null
如果有人调用我的方法,我想防御性地处理这个问题。通常我只返回Java 是否可以阻止try-catch返回null,java,try-catch,defensive-programming,Java,Try Catch,Defensive Programming,如果有人调用我的方法,我想防御性地处理这个问题。通常我只返回null 我决定实现一个trycatch,但看起来我最终还是返回了null 我是否可以编写我的trycatch,这样在方法末尾它就不会返回null 示例代码,在堆栈类上使用peek public T peek() { T temp = null; try { temp = array[size]; } catch
null
我决定实现一个try
catch
,但看起来我最终还是返回了null
我是否可以编写我的try
catch
,这样在方法末尾它就不会返回null
示例代码,在堆栈类上使用peek
public T peek()
{
T temp = null;
try
{
temp = array[size];
}
catch(Exception e)
{
}
return temp;
}
当使用空堆栈调用时。它将返回null
所以我是否应该为这种情况下的try
catch
而烦恼呢?我很想这样做:
if(isEmpty())
return null;
如果堆栈不是空的,我想返回元素。如果堆栈为空,那么如果我使用
try catch
,是否可以避免返回null?很难想象数组[size]
会抛出异常,除非数组为空或大小超出数组长度。所以,你可以这样做-
if (array != null && array.length > size) {
return array[size - 1]; // assuming your size starts at 1
}
return null; // need to return something, if not null you need an option type.
编辑
或者,用单子之类的东西
if (array != null && array.length > size) {
return new Some<T>(array[size - 1]); // assuming your size starts at 1
}
return new None<T>();
if(array!=null&&array.length>size){
返回新的Some(数组[size-1]);//假设您的大小从1开始
}
返回新的None();
这就是我解决问题的方法。通过在peek函数中抛出异常,将处理该异常的职责放在调用方。为什么?因为我希望一个错误引起尽可能大的爆炸。peek方法也变得更小。同样,正如您已经同意的那样,返回null是站不住脚的
public T peek() throws IndexOutOfBoundsException
{
return array[size];
}
及
该方法必须返回某些内容或引发异常。如果您有一个无界的泛型类型,那么像null对象模式这样的东西就不能使用,因此这些选项将返回
null
,返回包含t
的内容,比如Optional
,或者引发异常
如果您不喜欢
null
的安全性,可以使用Java 8或库中的Optional
。选中的异常具有类似的安全性,但在这里是不合适的。相关:,只是在这种情况下,您避免使用try/catch
块。执行if-else。try-catch是处理程序中正常通信的糟糕方式。它的性能很差,只是看起来很难看,你希望它返回什么?你对处理IndexOutOfBoundException的try-catch做了什么?为什么要它返回?我认为更有效的问题是你想返回什么而不是null?那会返回null@AndersLind我的评论是“需要返回一些东西,如果不是空的话,你需要一个选项类型。”太微妙了?对不起,我只看到了“返回空”这并不微妙。必须仔细阅读。@ElliottFrisch谢谢。我想指出:这不是防御性编程,这是我的标签之一。卸妆不是防御性的吗?即使函数调用异常,补偿也会返回。
try
{
T top = thestack.peek();
/* Do something with that object */
}
catch(IndexOutOfBoundsException e)
{
/* Do something else */
}