啊哈Reddit,没了你咱们还能在哪里从鱼目混珠的网络中提炼真正的精华?就在这杂乱无章的论坛中,的的确确存在着这样一些精辟的讨论。html
好比有个叫Shambloroni的兄弟发起了一个引发普遍共鸣的话题(收到了150个回复和投票)。话题的开始是他在吐槽 Java 有哪些方面最让他感到厌烦,同时他又向其余程序猿征集关于编写Java时使人蛋疼(伤感……)的故事。java
下面我列出了一些最有意思的回复——你会赞成吗?python
虽然我才刚刚开始编写 Java 程序,可是在Java 中实现让程序停顿一些时间而后继续运行这件事情已经复杂的令我震惊。除了写下基本的指令完成停顿外,我还必需要用 try-catch 来包裹的这些操做。没准对于大牛来讲这不算什么,可是对我来说这太使人难过了。程序员
还有跟全部 IO相关的异常也让许多简单的事情变得繁琐起来。好比我仅仅想简洁地作些事情,但最后老是会搞砸,。而后我不得不在全部方法上加上“throws Exception”。安全
我一样痛恨不少 Java 库中引入模块的方式(好比根据名称加载模块)。相对而言,我更但愿在编译时就能检查我须要的依赖库是否已经加载了。网络
我恨 Java,就是单纯的恨。负责任地说,我从不使用 Java 写程序的最大因素就是由于我恨它。还有一点就是JRE糟糕的模块化。就算你用了一些加载工具好比Launch4j,你仍然须要让用户安装一个超过200 MB 的框架来运行程序。框架
Java还缺乏getter和setter注解。这样能够更简单的添加和移除模板代码。模块化
Java 缺乏一些杀手级的模块。虽然据说一些不错的模块将被加入到Java 9.x 中,但目前为止这是我最大的槽点了。函数
我遇到的最大的麻烦就是如何一块儿使用基本元素和对象。例如, 把一个char[]类型的变量转换成一个列表别提有多费劲了,并且我感受这种操做根本不必这么麻烦。工具
没有无符号的基础类型。这尼玛是闹哪样啊!
null(最大槽点)。
没有getter和setter注解(例如,没有属性)。
Java 只支持位置参数。我喜欢像Smalltalk 那种支持多样化的参数形式,或者是强制使用关键字参数的Python 3。
好比在 Samlltalk 中调用一个具备两个参数的函数,能够这样作:
myInstance myMethodWithFoo: arg1 Bar: arg2
在 Python中你可使用下面的语法来调用函数并给函数参数赋值:
my_inst.my_method(foo=arg1, bar=arg2)
不支持多分派(Multiple Dispatch)?
这些是我最早想到的,不过以为应该还有更多。认真地说,使用回调函数一直是一个大问题,由于它太麻烦了。不过Java 8 中解决了这个问题,我仍是很开心的 =)
被强迫的处理异常——真主保佑你。谁能告诉我为何我非要用try-catch 来包裹每个Thread.sleep()……?我历来就没有真正见过那个我被要求去处理的InterruptedException。
我知道我要说的可能不是一个普遍承认的问题,可是我真的赞成checked exception(应被检查的异常)很烦人。这些异常让代码变得面目全非还让重构变得不可能。我明白他们为何存在(并且理论上也说的通),可是他们没为开发者带来什么实质好处。不论你作什么,都不要留一个空的catch 块,就算你认为这个异常永远不会发生。你大能够把这个checked exception用RuntionException(运行时异常)从新封装一下,再抛出去。