在返回值之前断开方法

时间:2014-01-21 13:50:03

标签: java

有没有任何解决方案我可以打破一个运行的方法,该方法应该返回int[]或其他什么,但没有!任何回报值。 我认为这可能会有一些例外,但我找不到一个方法。更具体一点,我想要一些东西,试图找出一个对象的某个字段是否被设置,如果是,则返回它,如果没有返回一条消息,告诉我输入到目前为止没有。 像这样的东西:

public int[] returnArray(){
       if(array_was_set==true) return the array;
       else show message that it wasnt set and quit the method without any return value;
   }

5 个答案:

答案 0 :(得分:2)

这样做的一种方法是,返回null并让调用者决定,如果调用者得到一个nun-null(或者可能是非空)数组,它将以某种方式处理它,如果调用者得到一个空或null数组它可以打印一条消息。

我建议不要使用异常作为返回值的替代,请参阅此question以了解有关何时抛出异常的更多信息。

答案 1 :(得分:2)

有三种选择可供选择,具体取决于您的情况:

  1. 使用null的返回值(并记录它)
  2. 使用详细消息抛出异常。我会将此版本仅用于非法API使用或逻辑错误情况(错误)等特殊情况。
  3. 返回一个包装类,包含返回值和其他相关消息(相关)
  4. 编辑:另外两个选项:

    1. 使用多态 - 返回类型可以是Result,具体的子类可以是NoResult和DataResult。
    2. 返回一个定义为:

      的常量值,而不是返回null

      静态最终NO_RESULT = new int [0];

    3. 稍后您可以检查返回的值(使用==条件)。

答案 2 :(得分:1)

你应该可以通过提出异常来做到这一点。只需在异常的构造函数中使用该消息。

但是,异常是相对昂贵的,如果这不是一个真正的错误条件,你应该考虑做其他事情,比如返回null表示没有什么可以返回。

答案 3 :(得分:0)

是更好的方法是使用Exception

例如

public static void main(String[] args) {
    try {
        new Result().returnArray(false) ;
    } catch (Exception e) {

    }
}

public int[] returnArray(boolean input) throws Exception {
    if(input) {
        return new int[]{1};
    }
    else {
        System.out.println("Not match");
        throw new Exception();
    }
}

答案 4 :(得分:-2)

当您在方法签名中声明它正在返回数据类型时,它必须具有返回该特定类型值的return语句。否则你将得到编译时错误。 当一个方法可以避免return语句时,即使它有返回类型,唯一的例外是当存在无限循环或抛出异常时。否则返回声明是强制性的。 提出您的问题,您可以轻松实现您的目标。如果你想根据你的要求在特定点终止,只需说, return null;

它适用于除基本类型之外的所有数据类型,在这种情况下,您需要适当地对Wrapper类类型进行类型转换。

public int[] returnArr()  {
   if(some condition)
     return SomeIntArray;
   else
     return null;
}

public int returnInt()  {
   if(some condition)
       return 2;
   else
       return (Integer)null;
}