在C#中没有等价物的Java语言特性

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (9)

主要与C#合作,我倾向于从C#特性的角度来思考,而这些特性在Java中不可用。在去年与Java广泛合作后,我开始发现我希望在C#中使用的Java特性。以下是我所知道的列表。任何人都能想到C#背景的人可能没有意识到的其他Java语言功能吗?

文章http://www.25hoursaday.com/CsharpVsJava.htmlhttp://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp给出了Java和C#之间差异的非常广泛的列表,但我想知道我是否错过了(非常)很长的文章。我也可以想到一个特性(协变返回类型),我没有在这两篇文章中提到过。

请限制您的自定义代码或第三方库无法有效实施的语言或核心库功能的答案。

  1. Covariant返回类型 - 一种方法可以被返回更具体类型的方法覆盖。实现接口或扩展类时很有用,并且您希望重写方法返回更具体到您的类的类型。这可以使用C#中的显式接口实现来模拟,但在重写类方法时没有简单的等价物。
  2. 枚举类是一个枚举 - 枚举是java中的完整类,而不是像.NET中的原始类型的包装。Java允许您在枚举上定义字段和方法。
  3. 匿名内部类 - 定义一个实现方法的匿名类。虽然Java中的大部分用例都是由.Net中的代表所覆盖的,但在某些情况下,您确实需要将多个回调作为一个组传递。选择使用匿名内部类将会很好。
  4. 检查异常 - 我可以看到这在用于Java应用程序的常见设计的上下文中是如何有用的,但是我对.Net的使用经验让我习惯于仅将异常用于不可恢复的条件。IE异常表示应用程序中存在一个错误,只能用于日志记录。我并没有完全想到为正常程序流使用异常。
  5. strictfp - 确保严格的浮点运算。我不确定哪种应用程序会觉得这有用。
  6. 接口中的字段 - 可以在接口中声明字段。我从来没有用过这个。
  7. 静态导入 - 允许使用类的静态方法,而不用类名进行限定。我今天才意识到这个功能是存在的。这听起来像一个很好的方便。
提问于
用户回答回答于

Java的泛型允许类型通配符。例如,<T extends Object & Comparable<? super T>> T Collections.max(Collection<? extends T>) { ... }在C#中不可表达。

用户回答回答于

Java具有反映层次结构和文件系统布局的包,而在C#中,程序集不受名称空间层次结构的影响。

扫码关注云+社区