问题描述
如果你是JAVA程序员,是不是经常这样被困扰?一,重复的类型申明Useruser=newUser();说明:Java是静态语言,为了这一点,声明变量的时候必须明确告诉编译器该变量的类型。Java编译器就不能智能点吗?二,临时变量inttotal=0;for(inti=0;i<10;i++){total+=i;}说明:total和i变量,造成局部代码臃肿,代码有更多的状态,多线程控制非常困难。三,static对面向对象的冲击publicclassPerson{publicstaticinttotal=0;}说明:static把不属于对象模板的东西硬生生的塞进去,使得模板不伦不类。四,不支持高阶函数和闭包publicvoidloan(operate){BufferedReaderin=null;try{in=newBufferedReader(newFileReader(filename));operate}catch(Exceptione){e.printStackTrace();}finally{in.close();}}说明:不能以函数作为参数,使得Java处理上面类似的需求时,最优雅的实现就是:先申明一个接口,写多个类实现这个接口中的方法,然后把这个接口作为这个函数的参数。结果便是,类的数量迅速增加,类也变成了只是一个方法的包装器!五,switch只支持int和enum类型switch(name){//java不支持这样写case"zhangshan":...case"lisi":...case"wangwu":...default:...}说明:相信有很多Java程序员质疑,Java的switch为什么只支持int和enum类型?六,synchronized泛滥publicsynchronizedvoidgetResouce(){...}说明:Java编程中最难的要数多线程编程,synchronized是很多程序员迈不过的槛!七,转义之痛Stringpath="c:\test\test.java";Stringcontent="hello,"MrRight"";说明:转义,让优秀的程序员也不得不从流畅的编程中停下来,为编译器的无能做低级劳动。八,运算符重载publicclassComplex{privateintreal;privateintimaginary;+(Complexcomplex){returnnewComplex(real+complex.real,imaginary+complex.imaginary);}}说明:运算符重载,多么优美的风景线,Java却无情的拉上了封条。九,繁琐的多重循环for(inti=0;i<n;i++){for(intj=0;j<m;j++){...}}说明:大家也许已经习惯了多重循环,但我们为什么要习惯这种笨拙的实现?十,多余的字符publicStringgetName(){returnthis.name;}说明:()必须吗?String必须吗?return必须吗?.必须吗?;必须吗?本文摘自:编程十万个为什么(http://www.bcwhy.com)详细出处请参考:http://www.bcwhy.com/thread-1816-1-1.html
解决方案
解决方案二:
eggspain
解决方案三:
你说的这些,在Scala,Erlang,Haskell等函数式编程语言中解决了,在Java这类静态语言中还没有什么办法。
解决方案四:
java语言比C++简单多啦,知足吧!
解决方案五:
抱怨鸡长的不像鸭子。
解决方案六:
繁琐不繁琐,那是习惯问题。让你用scala写底层应用,不见得你就能高兴得起来。。。我们现在就面临这个尴尬的处境...java--->scala
解决方案七:
怎么我看很多都是不是语言的问题,而是写代码或者系统设计的问题4JAVA8有专门对这个有优化,自动使用多线程5JAVA7解决7什么语言没有转义
解决方案八:
该回复于2011-04-19 09:55:10被版主删除
解决方案九:
别忘了,字符串不能用==号的。可能是为了考虑跨平台,只能使用所有系统的最小公分母。这和我们现在写JS或者CSS一样,不用的浏览器完全不一样,只能用都支持的,没有办法的事情。
解决方案十:
兄弟,转ror吧。。。
解决方案十一:
其实有些说的很有道理的!
解决方案十二:
四,不支持高阶函数和闭包publicvoidloan(operate){BufferedReaderin=null;try{in=newBufferedReader(newFileReader(filename));operate}catch(Exceptione){e.printStackTrace();}finally{in.close();}}说明:不能以函数作为参数,使得Java处理上面类似的需求时,最优雅的实现就是:先申明一个接口,写多个类实现这个接口中的方法,然后把这个接口作为这个函数的参数。结果便是,类的数量迅速增加,类也变成了只是一个方法的包装器!特别是这一条深有感触!
解决方案十三:
该回复于2011-04-21 09:37:30被版主删除
解决方案十四:
用在合适的地方就是和谐的:)引用4楼zangxt的回复:
抱怨鸡长的不像鸭子。
O(∩_∩)O哈哈~
解决方案十五:
引用5楼xiaotugege的回复:
繁琐不繁琐,那是习惯问题。让你用scala写底层应用,不见得你就能高兴得起来。。。我们现在就面临这个尴尬的处境...java--->scala
不知道你写的东西有多底层?硬件驱动程序?
解决方案:
引用4楼zangxt的回复:
抱怨鸡长的不像鸭子。
没明白LZ想说明的什么?
解决方案:
引用14楼bao110908的回复:
引用5楼xiaotugege的回复:繁琐不繁琐,那是习惯问题。让你用scala写底层应用,不见得你就能高兴得起来。。。我们现在就面临这个尴尬的处境...java--->scala不知道你写的东西有多底层?硬件驱动程序?
难道我给你解释了。你能明白?
解决方案:
引用16楼xiaotugege的回复:
引用14楼bao110908的回复:引用5楼xiaotugege的回复:繁琐不繁琐,那是习惯问题。让你用scala写底层应用,不见得你就能高兴得起来。。。我们现在就面临这个尴尬的处境...java--->scala不知道你写的东西有多底层?硬件驱动程序?难道我给你解释了。你能明白?
难道Java程序会的只有Java么?
解决方案:
引用16楼xiaotugege的回复:
引用14楼bao110908的回复:引用5楼xiaotugege的回复:繁琐不繁琐,那是习惯问题。让你用scala写底层应用,不见得你就能高兴得起来。。。我们现在就面临这个尴尬的处境...java--->scala不知道你写的东西有多底层?硬件驱动程序?难道我给你解释了。你能明白?
现在的小P娃怎么这么清高?难道你认为Java程序员会的只有Java么?
解决方案:
jdk1.7出来就能switch字符串了java邮件系统自己写的感觉还不错下载地址:另外还可以在这里先看看运行效果: