Java 7以后的哪些function必须鼓励从C#切换?

C#目前势头良好。 为了切换(或返回)到Java,您需要具备哪些function?

如果人们为当前的Java版本发布了这些的变通方法,例如Nullables被自定义类包装,那么这将是非常有用的,以使这个更有趣的wiki。

作为.NET / C#开发人员,这里缺少让我烦恼的function。 这个列表没有特别的顺序 – 正如想到的想法:

  1. Java库太小了。 对于常见的事情,我必须在5种竞争的开源产品中进行选择,因为基础库缺乏很多方面。
  2. 这是一种面向对象的编程语言吧? 为什么原始类型不能从“对象”inheritance?
  3. 指针
  4. Lambda表达式
  5. 关闭
  6. 部分类和较小程度的部分方法
  7. 对generics的真正支持
  8. 使用语句和Dispose – 对我来说这是一个真正的WTF。 你真的必须在try / catch块中显式关闭连接。 可怜的Java家伙!
  9. 收益率会很好
  10. 无符号整数 – 再次WTF? 为了什么目的,我必须使用比我需要更大的数字类型?
  11. 在Java中,您可以从try / catch的最后一个块返回。 一位同事通过这种方式引入了一个错误,让我感到很困惑。 应该像在C#中一样禁止这种行为。

我很少使用Java,当我这么做时,我会有各种各样的WTF时刻。

编辑:我删除了每个评论基于它自1.5以来不再缺少Javafunction的事实。

根据我的经验,Java vs. .Net更多的是商业决策,而不是技术决策。 拥有MS经验的商店趋向于.Net和拥有Java体验趋势的Java和OSS商店。 我看到很少有人根据语言特征进行切换的证据。 另一方面,我看到商店大量倾向于一个或两个关键员工的平台b / c,他们想雇用他们在该领域知识渊博。

没有特别的顺序:

  • 函数指针 (委托); 事物的整个传递接口是愚蠢的
  • 真正的仿制药 ; 如果编译器甚至无法通过单元的编译来保存元数据,那么具有类型安全generics的重点是什么?
  • 你的速度 ; 与包含在“托管”库中的本机控件相比,所有自绘ui库都非常慢,更不用说微软的自绘ui是通过direct3d硬件加速的
  • yield return构造 ; c#是如此用户友好,这很疯狂
  • 运算符重载
  • linq ; 只是因为它如此上瘾
  • 属性 ; 你上瘾的更多的synctatic糖
  • 更好地与本机代码互操作 ; 与jni -.-相比,c#的p / invoke和本地com支持使interop变得如此简单
  • 第一类价值类型 ; 这与真正的generics相辅相成,拥有通用列表从不在c#中装箱/取消装箱是c#为什么比java快的部分原因。

我会说这是最重要的一个:

  • 响应迅速,信息量大的调试器 ; 现在甚至没有任何东西可以接近视觉工作室

刚刚离开袖口,我认为Java 7需要的最大的事情是每个人都感到遗憾的是缺少封闭。

我是一名C#程序员,大约一年前我不得不参与Java应用程序的开发。 我最想念的是:

  • Visual Studio(Eclipse很好,但VS是VS,尤其是Team Edition)
  • 将字符串与==进行比较
  • 属性
  • 作为第一类对象的基本类型(例如,不是“int”类型vs“Integer”类)
  • 匿名方法(可以使用匿名类进行解决方法但不一样)
  • LINQ

当我回到C#时,我错过了一个单独的Javafunction:方法签名中的显式exception声明。

免责声明:我说的是一个有点旧项目,我不知道当前版本的Java中是否存在其中一些function。

减少令人发指的XML解析和操作工具。 在Java中用XML做任何事都很糟糕

我也会反过来给出一个答案。 C#需要像Java一样的枚举实现。 Java的枚举摇滚!

我还要在此列表中添加匿名覆盖。 很抱歉离开主题,但C#需要能够匿名覆盖方法。 我一直在Java和C#之间来回切换,我不得不说对unit testing遗留代码,没有比匿名类重写更好的了。

我需要某种函数指针。 在C#中使用委托的能力非常有用。 在Java中有很多次我想创建一个委托或函数指针的映射作为解决方案,但我不能。 我知道你可以在Java中模拟类似的东西,但将抽象作为语言的一部分是一个巨大的优势!

动量。 我在两个平台上都做了很多开发。 由于C#语言的发展方式,我更喜欢.NET方面。 Java的演变似乎更像是对C#的反应,而不是对实际愿景的反应。 所以我认为Java要做的最好的事情是忽略.NET并创建自己的新东西。

另一个我想要的是一些相当于LINQ。 当我尝试进行顶级编码器竞争并意识到它们只支持.NET 2.0时,我注意到我实际上依赖于使用LINQ的能力。 一旦习惯使用LINQ解决问题并使其成为常规编程词汇表的一部分,就很难从根本上看不出问题。 它类似于使用generics,然后无法使用generics。

我认为,Java和C#之间的选择不是语言function的问题,而是平台和生态系统选择的问题。

所以,我怀疑Java或C#中的任何新的语法糖都会导致平台之间的大量切换器。

毕竟,JVM世界有Scala,许多语言敏感的开发人员正在以某种方式使用它。

我认为,你应该考虑将这个神圣战争从“Java vs C#”转换为“JVM vs CLR”,因为JVM(在过去几年 – 主要是)不仅是Java,还有Scala,Groovy,Clojure,JRuby,Jython和十几种JVM语言。

属性!

匿名对象也很好

对于代理开发来说,像Scala(在其余部分之上)的延续也会很好。

支持在没有IKVM和其他此类层的情况下运行CLR(反之亦然可能是JVM)。

让我们明确一点,我们需要区分Java和JVM。 我实际上是从C#切换到Java,但我承认这不是因为Java的语言function惊人! 我非常谦虚地认为,C#是更好的语言,而CLR可能是更优雅的VM。 但是,即使使用Mono,您也不会编写遍布各处的应用程序!

我认为Java的最大理由就是它拥有的令人惊叹的社区。 这是最先进技术的开发地,而不是Sun(现在的Oracle)。 Java社区一直是开发企业技术的领导者。 例如,Microsoft提供DI框架需要多长时间? .NET中的AOP在哪里? 当我启动.NET项目时,我的基础是Spring.NET,一个Java端口。 当我需要ORM时,它就是NHibernate。 需要一个测试框架? NUnit的。 我意识到.NET平台还有其他OSS项目,但与Java社区相比,他们的数量和微软的支持是可笑的。

替换BigDecimal类的Java的原生’decimal’类型会很好。 但Java线程安全的集合很好。

也许问题不在于Java 7需要说服开发人员如何使用它,而更多的是使开发人员想要从企业/服务器端java语言转移到不同的C#桌面仅面向Windows的世界的情况?

对于大多数开发人员来说,语言不难发现,无论是Java还是C#。 我用Java开发,但Linq没多久理解和使用。

我认为Java或C#的选择取决于你个人的动机 – 也许是金钱? 在这种情况下,任何一种语言都会做,无论它们是否具有某些特征。

STE

他们应该从修复日历/日期相关类开始,即使这看起来太多了。

将模型中的值映射到UI的简单方法(如Java / FX中的bind

我认为这取决于商业决策,而不是语言本身。 但我真的非常喜欢C#lambdas和咖喱:D:D

http://mikeomatic.net/?p=82

运行在任何可迭代的地图({codeblock})会很好。 并过滤掉。 并且能够从方法中轻松返回多个值。

 (a,b,c) = getThreeValues(); 

(将分配各个变量a,b和c)。

实际上我只是认为他们应该在JVM上使用Haskell作为支持的脚本语言:D

linq,lambda,匿名类型

另一方面,.net获得了Terracotta(半商业),Infinispan,Compass等企业开放项目吗? 没有。 ncache(商业),lucene.net远远落后于他们。 特别是Terracotta是独一无二的,它可以改善你的一些应用程序x100,它简单完美和免费(分区是商业)。 如果我们在.net中使用任何东西和带有terracotta + hibernate + terracotta-hibernate-integration的java实现高负载应用程序,那么java app可能会比.net one更高效。 像nhibernate,log4net,lucene.net这样的.net的一些端口,但所有这些都试图捕获java版本。 entity framework是一场灾难,他们必须以nhibernate为基础或从中吸取教训。

.net仅适用于Windows(单声道远离企业,没有任何企业使用它),myspace.com为其4000个Windows Web服务器许可证花了多少钱? 百万 ?

如果不购买专业版,你不能安装一个简单的插件VS(并不能做其他事情),

amazon web services中的一些Windows实例类型几乎是linux版本的x2价格。

如果你看看ohloh.net开源java项目计数(使用语言比较工具),你会发现java比c#的卷多x5。

Java在全球拥有20%的份额,而c#拥有%4.x(来源:tiobe.com)

查看顶级网站; 只有microsoft和myspace正在使用.net。 谷歌,亚马逊,ebay,linkedin,阿里巴巴,推特(从铁路切换到scala)…他们中的许多人正在使用java,而其他许多人正在使用php,ruby(facebook,yahoo,..)

作为一种语言,Java远远落后于c#,但Scala(在jvm上运行)与c#一样好,它的性能与java几乎相同,并且它可以使用所有jdk和其他java代码作为他的库。

我不是说java更好,但我说java也和.net一样有价值。

在任何地方“引诱”任何人都没有任何意义。 他们解决了不同的问题,你应该使用适合你的任何一个。

Java具有较少的“语言”和较少的结构来绊倒新人,它是独立于平台的,它不会变化太快,允许旧代码长时间保持(对一些大公司有利)。

C#具有紧密的桌面集成和一系列不错的function,使编程更有趣。 它有.net集成。 它有指针,闭包等,这使得n00bs(一个有效的语言目标,因此是基础)更难,但对于有经验的程序员来说更有趣 – 我没有说服自己这些function可以提高你的工作效率,但在某些情况下他们可以让你的代码更好! 此外,如果你需要指针,你需要指针

我没有看到目标受众有很多重叠。 为什么改变一种语言来吸引程序员,使整个行业更健康,有两种健康的语言,每种语言都旨在解决吸引不同开发者的不同问题?