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

时间:2010-03-16 18:17:01

标签: 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的经验使我习惯于仅在不可恢复的条件下使用异常。 I.E.异常表示应用程序中的错误,仅用于记录日志。我还没有完全考虑在正常程序流程中使用异常。

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

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

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

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

八进制文字! :d

int x = 0245; System.out.println(x);

输出165。乐趣:))

答案 2 :(得分:2)

在C#中,你不能在finally块中有一个return语句。

答案 3 :(得分:2)

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

答案 4 :(得分:1)

我不知道你是否想用你的语言,但我猜Type Erasure可以被看作是一些特色。