由于主要使用 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# 之间差异的非常广泛的列表,但我想知道我是否遗漏了(非常)长的文章中的任何内容。我还可以想到一个我在两篇文章中都没有提到的特性(协变返回类型)。
请限制对您自己的自定义代码或第三方库无法有效实现的语言或核心库功能的回答。
协变返回类型 - 一个方法可以被返回更具体类型的方法覆盖。在实现接口(interface)或扩展类时很有用,并且您希望覆盖方法返回更特定于您的类的类型。这可以在 C# 中使用显式接口(interface)实现来模拟,但在覆盖类方法时没有简单的等效方法。
枚举是类 - 枚举是 java 中的完整类,而不是像 .Net 中那样围绕原语的包装器。 Java 允许您在枚举上定义字段和方法。
匿名内部类 - 定义实现方法的匿名类。尽管 Java 中的大多数用例都由 .Net 中的委托(delegate)涵盖,但在某些情况下,您确实需要将多个回调作为一个组传递。如果能选择使用匿名内部类就好了。
已检查的异常 - 我可以看出这在 Java 应用程序使用的常见设计上下文中有何用处,但我使用 .Net 的经验使我养成了仅在不可恢复的情况下使用异常的习惯。 IE。异常表示应用程序中的错误,并且仅出于日志记录的目的而被捕获。我还没有完全接受为正常程序流程使用异常的想法。
strictfp - 确保严格的浮点运算。我不确定哪种应用程序会觉得这很有用。
接口(interface)中的字段 - 可以在接口(interface)中声明字段。我从来没有用过这个。
静态导入 - 允许使用类的静态方法而无需使用类名对其进行限定。我今天才意识到这个功能存在。这听起来很方便。
最佳答案
Java 具有反射(reflect)层次结构和文件系统布局的包,而在 C# 中,程序集与命名空间层次结构无关。
关于c# - 在 C# 中没有等效项的 Java 语言功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2456975/