在业务场景一般需要判断null,因为避免程序异常,而楼主所说的返回值一般可以返回一个非空默认值。
第二个就是楼主所说的抛出,但是不是抛出空指针(这样没有业务意义),而是抛出自定义业务异常,比如说自定义NullPersonException,这样的话最后输出到前台是比较有业务意义的。
第二个就是楼主所说的抛出,但是不是抛出空指针(这样没有业务意义),而是抛出自定义业务异常,比如说自定义NullPersonException,这样的话最后输出到前台是比较有业务意义的。
你说的第二点我刚明白.一般就是在企业中自定义继承RuntimeException(多是RuntimeException), 然后抛出该自定义异常.
我所说的返回, 不是返回值哦... 我的意思是, 站在我这个方法的立场上想,调用我这个方法的调用者, 如果他输入的值符合我抛出的异常, 就能捕获到我抛出的异常的Message. 是这个意思.
我觉得这样做不好,应该使用第二种方式比较好(也是我一般的习惯).
因为,关键是我想,有时调用者在调用我这个方法的时候, 无意中传入null值,但是想得到那个name的值,但是不明白为什么得不到.
所以我觉得,throw 异常,将异常的Message返回给嗲用者,让他自己处理.而不是什么都不反馈给调用者.
懂我的意思了吧. 我觉得是不是我没说明白我的意思.
我刚看一篇博文, 写的处理 NullPointerException技巧,http://www.importnew.com/7268.html
写的蛮好的,说的,其中一种方式就是建议抛出.
所以我顺便上贴来跟大家分享一下想法...
你说的对, 只是我看到很多代码, 都这样写, 所以感觉很奇怪.觉得那样处理不好.
我就是这个意思.当然, 我说的 '习惯', 自然是为了满足业务的呢...
觉得那样处理不好,其实是人家的业务需要这样做而已。
比如你说的那段代码,按你的就是直接跳出方法了,但人家的业务需求可能是这个为null可能就在业务场景中,这个为null不影响我其他的逻辑代码。
再者,如果你未捕获异常,那么,程序将会终止执行,这在实际生产中往往不是想要的结果,因为我们可能会对出现null的情况进行处理(比如给默认值等)。
一般可以不用try catch.
在顶层调用的时候才try catch吧.
说到这,又谈到我以前发的一个帖子 http://bbs.csdn.net/topics/390977498
你写的一个方法,肯定要想到以后,甚至给别人调用, 你自己可能不知道具体是怎么处理,要看业务的需要,由调用者处理.
要不然每一个方法都搞 try catch.你不觉得有问题么.
那貌似按你们俩说的,加在一起, 就变成两种可能:
1)不处理,往上抛.
2)捕获, 按业务需要给默认值.
两种都可以咯.看业务才能定.
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 出去.
但是我觉得直接使用我上贴时的第一种方式,我觉得是不好的. 上面写的好多原因, 我觉得,你懂的...
一般来说, 方法都往外抛出异常, 然后在顶层调用者 try catch.并翻译,反馈给用户.
除非自己知道怎么处理.
我觉得我上贴的时候的第一种写法不好. 考虑到异常, 但是并没有往上抛(又不处理). 我就是这个意思.
好了, 该结贴给你们了.