这算是入门级的设计问题了,新手不好意思在这里征求下大家的意见。
通常情况下(就是传null为恶意而为,而非正常情况下有可能为null的情况)声明某带有参数的方法,在对待参数被传入null值时:
1.无视,让程序自动的触发空指针异常抛向上层,来惩罚恶意的调用者
2.判断是否为null,是则抛出一个自定义的非运行时异常
3.方法内部加强判断,当参数为null时采用另一套流程(比如不处理或直接返回null),保证不出运行时异常
------------------------------------------
大家觉得哪种处理方式合理呢?或是有什么更好的解决办法?

解决方案 »

  1.   

    3.这样的程序健壮性好。但不处理是不对的。如果不处理,还不选1和2.比如 :
     Integer integer=new Integer(4);
      .........
     System.out.println((new Integer(2)+integer);如果运行中integer值为null会抛出异常,但如果在使用前对integer做一些判断:
     if(integer==null){
          System.out.println("integer is null.")
          System.out.println((new Integer(2)));
      }else {
          System.out.println((new Integer(2))+integer);
      }
    这样应该更好一些,程序能继续下去,同时人们可以知道,integer有问题了。
    通常不可能对所有的引用都做是否为null的判断,这部分引用应该采用1,2的办法来处理,但对你在编程时无法断定的引用(比如integer是从文件中反序列化来的),应该主动处理之。
      

  2.   

    一般都要处理 null的情况 传值前 判断也是可以的  ,如果方法的参数允许为null  就不用判断了吧
      

  3.   

    方法不允许null值,比如业务模型工厂的获取实例方法,参数为所要获取实例对象的类名,这种情况下,也就是参数为null完全是程序员故意的情况下
      

  4.   

    我认为第三种方法比较好。你自己定义的方法,应该考虑传入异常信息的能力
    如果你的方法是做除法,如果除数传入0,那么你的方法开始也要判断除数是否为0,而不应该向上抛出异常。
    如果向上抛出异常,该方法可能在不同地方多次调用,这样会增加try catch代码。
      

  5.   

    但我总觉得有些调用端手动填写的内容除了调用者恶意的情况下否则不会是null或非法。
    比如有个排序函数的参数列表需要调用端设置一下起始方向是"up”“down”"left"或是"right",我想这种情况还是不判断的好,压根就是太纵容调用端了。
    以上是我个人看法。
    还是想听听诸位前辈的建议。
      

  6.   

    或是说,当参数为null或不合法时,建议抛自定义异常提示调用端,还是直接结束该方法或者返回默认值(0,null.....)??
      

  7.   

    我认为第一种好,我从来都不判断null
      

  8.   

    偶觉得
    怎莫处理null的话
    要看你这方法用在什莫地方了如果是公共的方法,你必须要去处理,以实现你这个公共方法的功能
    因为既然你把方法公开了,就要事前想定会发生的各种情况如果是protected的方法,可以根据类的设计要求,
    看是从方法内处理还是把错误抛给调用者如果是私有方法,呵呵,
    随便你自己啦
    根据方法所在类的设计需求吧