在C#中没有等价的Java语言功能

jth*_*thg 16 c# java

大部分都使用C#,我倾向于考虑Java中没有的C#功能.在去年广泛使用Java之后,我开始发现我希望在C#中使用的Java功能.以下是我所知道的列表.任何人都可以想到C#背景的人可能没有意识到的其他Java语言特性吗?

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

请限制语言或核心库功能的答案,这些功能无法通过您自己的自定义代码或第三方库有效实现.

  1. 协变返回类型 - 方法可以由返回更具体类型的方法覆盖.在实现接口或扩展类时很有用,并且您希望重写方法返回更具体类的类型.这可以使用C#中的显式接口实现来模拟,但是在重写类方法时没有简单的等价物.

  2. 枚举是类 - 枚举是java中的完整类,而不是像.Net中的原语的包装.Java允许您在枚举上定义字段和方法.

  3. 匿名内部类 - 定义实现方法的匿名类.虽然.Net中的代表可以使用Java中的大部分用例,但在某些情况下,您确实需要将多个回调作为一个组进行传递.选择使用匿名内部类是很好的.

  4. 检查异常 - 我可以看到它在与Java应用程序一起使用的常见设计的上下文中是如何有用的,但是我对.Net的经验使我习惯于仅在不可恢复的条件下使用异常.IE异常表示应用程序中存在错误,仅用于记录日志.我还没有完全考虑在正常程序流程中使用异常.

  5. strictfp - 确保严格的浮点运算.我不确定哪种应用会发现这有用.

  6. 接口中的字段 - 可以在接口中声明字段.我从来没有用过这个.

  7. static imports - 允许一个人使用类的静态方法,而不用类名限定它.我今天才意识到这个功能存在.这听起来很方便.

Gab*_*abe 5

Java具有反映层次结构和文件系统布局的包,而在C#中,程序集与命名空间层次结构无关.


Gab*_*abe 2

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