Java还没有跟上吗?

我整天编写C#代码,但最近我跳过Java来做爱好的事情,比如为BlackBerry和Android平台编写代码。 这段时间我一直认为,就语言特征而言,Java和C#是彼此的双胞胎。

无论如何,我发现Java相当于C#1.1或类似的东西。 在Java中,我必须编写两次我在C#中编写的代码。 像对象初始化器,lambda,为了上帝的缘故,属性的特性是否会进入Java? 我试图浏览JSR的东西,但找不到任何东西。

Java根本没有跟上吗? 或者我只是不按照预期使用它?

我认为你是对的,Java没有很多C#引入的方便的新function。 许多新的C#特性只是编译器技巧(属性,对象初始化器,扩展方法),您可以在C#或Java中手动完成。

Java人员可能没有引入这些新function,因为他们可能更喜欢保持语言尽可能简单和向后兼容。

我不得不说这些天我更喜欢写C#。

我会说,是的,Java还没有跟上。 微软长期以来一直在努力研究Java(和C ++),并弄清楚他们有什么烦恼,缺少哪些function,并在随后的C#版本中修复了许多function。

此外,Java设计者似乎尽量保持他们的语言和解析器尽可能简单,而C#设计者不必担心语法糖:属性,委托,lambdas和LINQ都是这样的例子。 正如你已经注意到的那样,一勺语法糖使语言更容易下降。

Java肯定落后了,虽然我说它比C#1.1更接近C#2.0–例如,它有generics,尽管它们与C#中的有些不同。

我很失望地听到许多提议的语言function已被删除用于Java 7(特别是关闭),但随后Project Coin出现了 – 所以至少我们可能会有一些小function值得期待。

我很快就看不到Java在语言方面赶上C#了 – 他们有更多的语言包袱,这使得更难以改变语言。 尽管听起来有些微不足道,但是检查exception会给方法签名增加一个额外的“轴”,这使得某些东西(比如闭包)比其他东西更棘手。

(当然C#4.0也可以看到……)

流行语言越老,其代码库就越大,语言的更改就会以更保守的方式进行,以免破坏现有的代码库,修复起来会很昂贵。

Java是较旧的语言之一。 C#相对较新,可以更加彻底地改变。 与C和C ++相比,C和C ++十年来没有变化。

如果您真的想要新代码的新语言function,请尝试另一种与Java(Groovy,Scala,Clojure)互操作的基于JVM的语言。

我认为问题的一部分是经济问题。 当Sun成为市场领先者时,Java出现并不是偶然的。 他们的股票在2000年3月创下历史新高,受到互联网公司购买的所有服务器的推动。

当泡沫破裂,所有这些服务器都进入市场时,需要很长时间才能解决过剩问题。 Sun没有从中恢复过来。 商用服务器功耗的增加削弱了专业RISC芯片和Solaris曾经拥有的优势。 除非你是一个经济大国,否则你不可能成为一个伟大的军事大国; 作为这种规模的创新者也需要现金。

他们失去了许多曾经为公司提供动力的人才(比如Bill Joy)。

Sun的底层是一家硬件公司。 Java的策略,特别是在服务器端,是它有助于推动硬件销售。

我认为Java的变化速度因此而受到影响。

微软继续开发C#,因为收入继续涌入,Anders仍在使用它们,而且他们是一家最终通过该产品赚钱的软件公司。 这就是他们现在领先的原因。

确实你是对的。 但是,我认为语言改进的重点已经转移到新的JVM语言,例如Groovy和Scala 。

也许这是一件好事,因为Java拥有重要的用户群,遗憾的是,很难就哪些function(如果有的话)以及应该以何种forms添加到语言中达成一致。 例如,看看这个民意调查 。 另一方面,Sun承诺改进JVM,以促进动态JVM语言的开发和执行,例如invokedynamic指令, JSR 292 。

对我来说,这是一个体面的妥协。

这不是Swing vs WPF,就像粉笔与鱼子酱一样。