论坛首页 Java企业应用论坛

验证String是不是整数,用异常作判断怎么了!(续3)

浏览 10074 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2011-01-03  
0704681032 写道
超级大牛(忘了是谁了),

Joshua Bloch ?


你好强大! 就是Joshua Bloch ,我当时是在 GR 上看的,没太注意.反查了一下,就是他.


原文链接找不到了,随便找了个,有兴趣看看.
Joshua Bloch访谈:API对设计流程的影响

另外,IBM那个讲解Exception的那个我是肯定找不到了,好几年了.总之,try catch 完全不可怕,性能影响非常小,但是一旦命中了,就是一场悲剧了.
0 请登录后投票
   发表时间:2011-01-03  
gdpglc同学:
   我想问下为什么你为什么要使用这段代码来验证是否整型数据?目的是什么?还有更好的方式吗?
  
public static boolean validateInteger(String str) { 
    try { 
        Integer.parseInt(str); 
    } catch (Exception ex) { 
         return false; 
    } 
    return true; 
}  
   


   1、我想问下为什么不使用commons-lang包里的StringUtils.isNumeric(str)?
   2、引用太多Jar包?那就啥都别引用了,都自己写,重复发明轮子。
   3、如果你坚持这样写,我觉得没问题,也非常好,异常怎么了,能解决问题的最简单解决方案就是好的,而且你也提取方法封装了,没有问题,但问题是你没利用现有的更好的解决方案。
   4、性能问题?我的见解是如果有人认为是性能问题,直接去写C吧。
   5、我认为你做事方式不对,重复发明和使用自己的东西?这个虽小,如果你是架构师或管理人员,你写一堆自己的东西,你的团队对新东西学习能力如何,成本是多少,你考虑过吗?所以我认为要从小的地方开始复用成功解决方案,如果该方案不满足再考虑改进方案,最后才应该选择自己实现方案。
  
0 请登录后投票
   发表时间:2011-01-03  
从楼主的发言来看,他不是一定要纠结异常,他是为了突破常规,挑战权威,鼓励一下精神,顺便说一下,这个帖子,我没投隐藏。。。。。。。。。。呵呵
0 请登录后投票
   发表时间:2011-01-03  
gdpglc:

你写的方法是没有问题的。在项目里面谁都喜欢简洁、稳定的代码,并且只要不是核心算法,速度不是首要考虑的问题。

但是我觉得有两个问题你好像没有明白地说出来:

1、从业务逻辑设计的角度看,什么是异常;
2、该不该巧妙地使用异常。

从业务逻辑设计的角度看,与“异常”相对的就是“正常”,并且它们都有一个上下文语境。就拿文件处理来说,如果是处理用户文件上传,那么任何形式的请求数据,包括读不到文件,超大的文件,都是正常的,因为从测试的角度看,这些都是可能发生的,不受控制的;如果是读一个必须存在的配置文件,比如/etc/passwd,读取不到就是异常,因为这是不允许的。我一直拿这条标准来区别“正常”和“异常”,很管用。

在你的validateInteger(String str)方法里,从上下文语境看,任何传入的字符串都是可能发生的,是”正常“的,因此这里是没有”异常“的。

那么该不该巧妙地使用异常呢?我是个实用主义者,在速度和性能不是最重要的前提下,谁好用我就用谁,谁的代码又短又清晰我就用谁,巧妙地用一下异常我认为是可以的,只是要在注释中说明:”这里不是一个异常,只是取巧借用了一下“。这样就能把问题说清楚了。
0 请登录后投票
   发表时间:2011-01-03  
实在不明白,为什么这么多投隐藏?
我个人认为楼主的代码是没有必要,但是他想说明的问题,并不只是在这个地方。
我相信楼主的帖的愿意,在有些地方是十分有用的。
可是在String这里判断是否为数字显得不太好。

总体来说JavaEye素质太差了,不管从哪里说楼主都在努力。
有争论才会有进步。
瞧不起乱投隐藏的人。
0 请登录后投票
   发表时间:2011-01-03  
相对来说for(....)Character.isDigit(char)
比Integer.parseInt(String)做的事情要少一些,前者只负责移位然后做与操作。而后者要做大量的移位操作,这在时间上会花得比较多。对于如果有异常的话,都是一样的。
0 请登录后投票
   发表时间:2011-01-03  
其实validateInteger的功能和StringUtils.isNumeric是不一样的。这个“整数”是数学上的整数还是Java中的int呢?
0 请登录后投票
   发表时间:2011-01-03  
ArrayList有个isEmpty方法。那我能不能这么实现呢:如果get(0)抛出IndexOutOfBoundsException就说明列表是空的。
0 请登录后投票
   发表时间:2011-01-03   最后修改:2011-01-03
xibaiben 写道
ArrayList有个isEmpty方法。那我能不能这么实现呢:如果get(0)抛出IndexOutOfBoundsException就说明列表是空的。

不可,我不是让你用异常判断代替常规的逻缉表达。我是说,用异常作判断是可以的,需要用的时候就可以用...
我说的用法,当然有不能用或不该用的场景,你只拿不能的在说事...呵呵。

如果这样,我说java能开发显卡驱动吗? 不能(具我所知)。
然后,我就说java不能用来做软件开发...

这个和你的想法是一个思维。

你脑子里,也许很多软件规则都是一条包打天下的。
我的不是,我个人觉得,软件世界,纷繁芜杂,用简单的规则处理复杂的现实,就是在瞎搞...
0 请登录后投票
   发表时间:2011-01-03   最后修改:2011-01-03
投你8个精华, 崩溃了, 又要被隐藏了。

精神可佳。 还是应该大度些。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics