在Check parameters for validity的时候。我们可以用断言(Assertion)的方式,抛出异常的方式等。
对于以下一个程序段,假设输入参数必须小于0,返回值是一个String(具体产生方法是根据内部的逻辑)。
方法1:
public String myMethod(int a){
String str;
if (a>=0)
throw new IllegalArgumentException();
...//do the String generation logic
return str;
}
然后在调用函数中捕获IllegalArgumentException并进行相应处理。
方法2:
public String myMethod(int a){
String str;
if(a>=0)
return null;
else{
...//do the String generation logic
return str;
}
}
然后再调用函数中判别返回值是否为null。
以上两种方法哪一种更为合理呢?
另外抛出异常是不是对于public method的参数进行validity check的最常用的方法呢?

解决方案 »

  1.   

    if(a>=0)
    return null; 当然是这种,第一种异常很耗资源的。还是用返回值判断处理结果更合理!
      

  2.   

    第一问 
    LZ根据返回值再处理的时候 是老样子抛异常 还是做些其他的处理呢 
    如果是照样抛异常 那就没多少差别吧  第二问  
    个人感觉 不常用  
    如果 LZ想实现 处理 用户输入无效的情况
    最好是显式表达一些友好提示 比一大堆异常术语好多了
    至于工程上的有效性测试 不太清楚
      

  3.   

    我觉得如果要是参数违反你定义这个方法的可处理范围的话,有必要抛出异常.public 中文 翻译(语言 l)throw 无法识别的语言{
       if(l instanceof 中文)
          return l;
       if(l instanceof 英文)
          return new 中文(英文);
       ....
       throw new 无法识别的语言(l);
    }//调用
    public 火星语 implements 语言语言 结果 = 翻译(new 火星语());个人认为应该这样的.如果单纯的返回一个null之类的说明你的这个方法可以针对参数进行处理.
    当然,如果方法的业务逻辑允许,斑竹大大的方法的开销还是比较小的.
      

  4.   

    那么请问如果"do the String generation logic"中生成的字符串也为null,那么调用者如何知道是因为a>=0而产生的null,还是String generation logic产生的null呢?请高手不吝赐教!
      

  5.   

    null属于一类错误!
    异常也可以在那个do something中出哦!只有看你怎么区分了!可以采用全球资源符号!保你没相同情况!
    ['{33B61845-3434-4E5C-9417-DAF973ED76AE}']类似这个!