在业务场景一般需要判断null,因为避免程序异常,而楼主所说的返回值一般可以返回一个非空默认值。
第二个就是楼主所说的抛出,但是不是抛出空指针(这样没有业务意义),而是抛出自定义业务异常,比如说自定义NullPersonException,这样的话最后输出到前台是比较有业务意义的。

解决方案 »

  1.   

    感谢, 请问你所说的'返回非空默认值'是什么意思?
    你说的第二点我刚明白.一般就是在企业中自定义继承RuntimeException(多是RuntimeException), 然后抛出该自定义异常.
    我所说的返回, 不是返回值哦... 我的意思是, 站在我这个方法的立场上想,调用我这个方法的调用者, 如果他输入的值符合我抛出的异常, 就能捕获到我抛出的异常的Message. 是这个意思.
      

  2.   

    我觉得诸如NullPointerException是肯定要考虑到, 但是我觉得很多人写代码用的是我上贴时的第一方法.
    我觉得这样做不好,应该使用第二种方式比较好(也是我一般的习惯).
    因为,关键是我想,有时调用者在调用我这个方法的时候, 无意中传入null值,但是想得到那个name的值,但是不明白为什么得不到.
    所以我觉得,throw 异常,将异常的Message返回给嗲用者,让他自己处理.而不是什么都不反馈给调用者.
    懂我的意思了吧. 我觉得是不是我没说明白我的意思.
    我刚看一篇博文, 写的处理 NullPointerException技巧,http://www.importnew.com/7268.html 
    写的蛮好的,说的,其中一种方式就是建议抛出.
    所以我顺便上贴来跟大家分享一下想法...
      

  3.   


    你说的对, 只是我看到很多代码, 都这样写, 所以感觉很奇怪.觉得那样处理不好.
    我就是这个意思.当然, 我说的 '习惯', 自然是为了满足业务的呢...
    觉得那样处理不好,其实是人家的业务需要这样做而已。
    比如你说的那段代码,按你的就是直接跳出方法了,但人家的业务需求可能是这个为null可能就在业务场景中,这个为null不影响我其他的逻辑代码。
      

  4.   

    你的那种写法,多此一举而已。你不主动抛出NullPointerException,JVM也会抛出,有必要吗?
    再者,如果你未捕获异常,那么,程序将会终止执行,这在实际生产中往往不是想要的结果,因为我们可能会对出现null的情况进行处理(比如给默认值等)。
      

  5.   

    从来没你那么写过都是第一种。或try ..catch
      

  6.   


    一般可以不用try catch.
    在顶层调用的时候才try catch吧.
    说到这,又谈到我以前发的一个帖子 http://bbs.csdn.net/topics/390977498
    你写的一个方法,肯定要想到以后,甚至给别人调用, 你自己可能不知道具体是怎么处理,要看业务的需要,由调用者处理.
    要不然每一个方法都搞 try catch.你不觉得有问题么.
      

  7.   

    我知道, 直接抛出空指针是没有意义. 我的意思是, 按照1楼的说法, 可能要抛出自定义 NullPersonException, 这样更符合.
    那貌似按你们俩说的,加在一起, 就变成两种可能:
    1)不处理,往上抛.
    2)捕获, 按业务需要给默认值.
    两种都可以咯.看业务才能定.
      

  8.   

    你看API的 Integer类就是这样写:  public static int parseInt(String s, int radix)
                    throws NumberFormatException
        {
            /*
             * WARNING: This method may be invoked early during VM initialization
             * before IntegerCache is initialized. Care must be taken to not use
             * the valueOf method.
             */        if (s == null) {
                throw new NumberFormatException("null");
            }所以总结的一个结论, 就是 要么 try catch, 要么抛.
    就是1楼和7楼共同的想法. java本身提供的两种方式也是:要么try catch 然后看业务需要处理, 要么 throw 出去.
    但是我觉得直接使用我上贴时的第一种方式,我觉得是不好的. 上面写的好多原因, 我觉得,你懂的...
      

  9.   

    一般异常都是不捕获的,除非你知道如何处理它,或者是希望就算抛出异常了也能继续正常执行。像你这样的情况,想要 反馈一个 错误信息给客户,那么肯定需要捕获到异常然后 翻译成 错误信息的。至于如何捕获,一般都用一个全局的ExceptionHandler来统一处理,那么你就可以在项目中随意throws了另外分享一下我最近一个项目中处理这类业务错误,都采用Assert来处理,它提供比如:isTrue(),notNull()..等方法来简化代码
      

  10.   

    是的,哥们, 你说的对, 就是这个意思.
    一般来说, 方法都往外抛出异常, 然后在顶层调用者 try catch.并翻译,反馈给用户.
    除非自己知道怎么处理.
    我觉得我上贴的时候的第一种写法不好. 考虑到异常, 但是并没有往上抛(又不处理). 我就是这个意思.
    好了, 该结贴给你们了.