锁定老帖子 主题:我承认我没有if(xxx != null)
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-09-08
mathfox 写道 不能绝对化,不过,你的确是不应该判断
判断也没有什么用,也没有解决方案。还不如早把问题暴露出来。 可是在程序的关键部分,你也这么做么?我认为,在有些时候,判断一下还是很有用的。 |
|
返回顶楼 | |
发表时间:2010-09-08
鱼言风语 写道 UI的validation应该判断,其它地方应该不判断,让exception抛出来吧?
好像是你们team leader不对 难道后台就不会产生空指针? |
|
返回顶楼 | |
发表时间:2010-09-08
最后修改:2010-09-08
cantellow 写道 鱼言风语 写道 UI的validation应该判断,其它地方应该不判断,让exception抛出来吧?
好像是你们team leader不对 难道后台就不会产生空指针? 有2种情况,第一种是不应该为空的,比如你首贴的那个场景,如果是契约式编程,不应为空,那你不需要判断。出这种异常要做的事情就是检查环境配置。否则,虽然可以用assertNotNull,但还是很烦的。 第二种情况是有可能为空,比如表的某个字段,这种当然需要判断 |
|
返回顶楼 | |
发表时间:2010-09-08
luciferdevil 写道 一般需要在给页面对象或者List时,我会常常在获取对象的那个方法有个new:
List<String> list=new ArrayList(); 这样无论这个方法最终有没有得到数据,这个list都不会是null的,页面判断的时候只是if(list.size()==0){//对不起没有找到相关的数据} 用null的话 一个不好 就给用户500错误(以前在项目测试前期会出现这个……) 这个还是要看情况,或许在你这种情况下这种处理方式比较好。 但是换一种情况,想象一个复合数据结构,它的值跟用户没有任何关系,完全是后台业务逻辑所致。 如果本身因为某些不正当操作,比如解析一个XML文件,可能是因为你的XML文件格式有关,多写了一个<或者多写了一个/>,那么解析出错很可能返回的是null,如果你new一个对象,客户类怎么知道你这个对象是正常逻辑得到的? 客户类肯定会因为这个对象的数据时正常的,所以xml格式的错误一直不会发现,那么这可能会很悲剧。 个人认为如果对象跟用户的操作有关(比如输入),那么就应该判断,或者在用户操作的时候就做一些限制,而如果对象的生成跟业务逻辑是否正确有关,那么空指针就应该大胆的抛出,并做好log,为了好解决问题的根源所在。 |
|
返回顶楼 | |
发表时间:2010-09-08
fhyfufangyu 写道 JSP+EL :NullPointer的时候直接输出null,让我想起了卓越亚马逊的包裹地址:XX市XX区XX街null号。。。。
Freemarker:矫枉过正,到处都是XXX?if_exists 或者xx?default('') 以前做freemarker时,页面判断确实很郁闷,很多判断。List?XX.object?XX.subObject?XX.property?XX |
|
返回顶楼 | |
发表时间:2010-09-08
struts 写道 页面用el表达式.
我是做swing的 |
|
返回顶楼 | |
发表时间:2010-09-08
鱼言风语 写道 cantellow 写道 鱼言风语 写道 UI的validation应该判断,其它地方应该不判断,让exception抛出来吧?
好像是你们team leader不对 难道后台就不会产生空指针? 有2种情况,第一种是不应该为空的,比如你首贴的那个场景,如果是契约式编程,不应为空,那你不需要判断。出这种异常要做的事情就是检查环境配置。否则,虽然可以用assertNotNull,但还是很烦的。 第二种情况是有可能为空,比如表的某个字段,这种当然需要判断 比较同意,总结一点就是,某些情况下空指针的触发是因为其他的错误根源导致,那么就应该抛出,检查环境配置,修正问题的根源。某些情况下null的来源是“很正常的”,比如用户输入的情况,数据库的字段等等,那么这时不得不判断,或者使用断言。 |
|
返回顶楼 | |
发表时间:2010-09-08
最后修改:2010-09-08
elmar 写道 判断是不是NULL是caller的责任,而不是callee的责任。Callee可以假设传入的值是合法的。
我一般在某些场景:callee也判判一下。 假设一个场景:批量删除操作 jsp page: 一堆checkbox,id都是:objectIds action层: String[] warnIds; delete(String[] warnIds){ service.remove(warnIds); } Service层 remove(String[] warnIds){ if (warnIds != null){ for (int i = 0; i < warnIds.length; i++) { Warn warnTemp = (Warn) warnDao.getObject( Warn.class, Long.parseLong(warnIds[i])); if (warnTemp != null) { //Warn warn = new Warn(); // BeanUtils.copyProperties(warn, warnTemp); warnTemp.setDealIndex(new Long(2)); warnDao.updateObject(warnTemp); // warn.setMsgId(warnTemp.getMsgId()); // warn.setWarnLevel(warnTemp.getWarnLevel()); // warn.setWarnMsg(warnTemp.getWarnMsg()); // warnDao.saveObject(warn); // warnDao.removeObject(warnTemp); } } } } |
|
返回顶楼 | |
发表时间:2010-09-08
个人认为:如果无异常处理机制的系统里,在后台程序里只要有对对像进行操作,都应该做NULL值判定。程序的严谨性远远重于程序的可读性。如果页面有用到JAVA代码而不是用的标签,更应该考虑到这一点。否则用户一点一大堆看不懂的代码就出来了,你做的系统会大大打折的!
|
|
返回顶楼 | |