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

时间:2009-10-20 14:15:33

标签: c# java programming-languages language-features

目前C#势头良好。为了切换(或返回)Java,您需要有哪些功能?

如果人们为当前的Java版本发布了这些的变通方法,那么它也会非常有用,例如: Nullables被包裹在自定义类中,使其成为一个更有趣的维基。

24 个答案:

答案 0 :(得分:33)

作为.NET / C#开发人员,这里缺少令我烦恼的功能。这个列表没有特别的顺序 - 就像想到的想法一样:

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

    编辑:我删除了每个评论,因为它不再是自1.5以来缺少的Java功能。

答案 1 :(得分:20)

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

答案 2 :(得分:16)

没有特别的顺序:

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

我认为这是最重要的一个:

  • 响应迅速,信息量大的调试器;现在没什么可以接近视觉工作室了

答案 3 :(得分:13)

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

答案 4 :(得分:13)

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

  • Visual Studio(Eclipse很不错,但是 VS是VS,特别是Team Edition)
  • 使用==
  • 比较字符串
  • 属性
  • 基本类型作为第一类对象 (例如,不是“int”类型vs“整数” 类)
  • 匿名方法(解决方法可以 通过使用匿名类来完成 但它不一样)
  • LINQ

当我回到C#时,我错过了一个单独的Java功能:方法签名中的显式异常声明。

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

答案 5 :(得分:11)

减少令人发指的XML解析和操作工具。在Java中使用XML做任何事情糟透了

答案 6 :(得分:10)

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

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

答案 7 :(得分:9)

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

答案 8 :(得分:9)

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

答案 9 :(得分:8)

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

答案 10 :(得分:7)

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

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

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

答案 11 :(得分:5)

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

答案 12 :(得分:3)

属性!

匿名对象也很好

答案 13 :(得分:2)

Continuations,就像Scala一样(在其余部分之上)对于代理开发也会很好。

答案 14 :(得分:2)

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

答案 15 :(得分:2)

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

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

答案 16 :(得分:1)

他们应该首先修复与日历/日期相关的类,即使这看起来太多了。

答案 17 :(得分:1)

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

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

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

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

步骤

答案 18 :(得分:0)

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

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

答案 19 :(得分:0)

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

Java拥有更少的“语言”和更少的结构来吸引新人,它独立于平台,并且变化不会太快,允许旧代码长时间停留(对一些大公司有利)。

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

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

答案 20 :(得分:0)

linq,lambda,匿名类型

答案 21 :(得分:0)

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

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

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

亚马逊网络服务中的一些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一样有价值。

答案 22 :(得分:0)

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

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

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

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

答案 23 :(得分:0)

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