是否有可能阻止try catch返回null ?



如果有人调用我的方法,我想防御性地处理这个问题。通常我只返回null

我决定实现try catch,但看起来我只是最终返回null无论如何。

我可以写我的try catch在这样一种方式,在方法结束时,它不返回null ?

示例代码,在Stack类上使用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吗?

我是这样处理这个问题的。通过在peek函数中抛出异常,将处理该异常的职责交给调用者。为什么?因为我想让一个错误引起尽可能大的爆炸。peek方法也变得更小了。另外,正如您已经同意的那样,返回null是蹩脚的。

public T peek() throws IndexOutOfBoundsException
{   
  return array[size]; 
}

try
{
  T top = thestack.peek();
  /* Do something with that object */
}
catch(IndexOutOfBoundsException e)
{
  /* Do something else */
}

该方法必须返回一些东西或抛出异常。如果你有一个无界泛型类型,那么像null对象模式这样的东西就不能使用,所以选项是返回null,返回包含T的东西,比如Optional<T>,或者抛出一个异常。

如果你不喜欢null的安全性,你可以使用Optional,无论是来自Java 8还是一个库。检查异常具有类似的安全性,但在这里不合适。

很难想象array[size]会抛出异常,除非数组为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.

编辑

或者,使用Option单引号,比如

 if (array != null && array.length > size) {
   return new Some<T>(array[size - 1]); // assuming your size starts at 1
 }
 return new None<T>(); 

最新更新