大部分都使用C#,我倾向于考虑Java中没有的C#功能。在去年广泛使用Java之后,我开始发现我希望在C#中使用的Java功能。以下是我所知道的列表。任何人都可以想到具有C#背景的人可能没有意识到的其他Java语言特性吗?
文章http://www.25hoursaday.com/CsharpVsJava.html和http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp提供了一个非常广泛的Java和C#之间的差异列表,但我想知道我是否错过了(非常)长篇文章中的任何内容。我还可以想到我在两篇文章中都没有提到的一个特征(协变返回类型)。
请限制语言或核心库功能的答案,这些功能无法通过您自己的自定义代码或第三方库有效实现。
协变返回类型 - 方法可以由返回更具体类型的方法覆盖。在实现接口或扩展类时很有用,并且您希望重写方法返回更具体类的类型。这可以使用C#中的显式接口实现进行模拟,但是在重写类方法时没有简单的等价物。
枚举是类 - 枚举是java中的完整类,而不是像.Net中的原语的包装。 Java允许您在枚举上定义字段和方法。
匿名内部类 - 定义实现方法的匿名类。虽然.Net中的代表可以使用Java中的大部分用例,但在某些情况下,您确实需要将多个回调作为一个组进行传递。选择使用匿名内部类会很好。
检查异常 - 我可以看到这在Java应用程序使用的常见设计的上下文中是如何有用的,但是我对.Net的经验使我习惯于仅在不可恢复的条件下使用异常。 I.E.异常表示应用程序中的错误,仅用于记录日志。我还没有完全考虑在正常程序流程中使用异常。
strictfp - 确保严格的浮点运算。我不确定哪种应用会发现这有用。
字段 - 可以在接口中声明字段。我从来没有用过这个。
静态导入 - 允许一个人使用类的静态方法,而不用类名限定它。我今天才意识到这个功能存在。这听起来很方便。
答案 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可以被看作是一些特色。