Java语言设计者决定使用虚拟扩展方法而不是像C#这样的静态扩展方法。静态扩展方法可能导致与未来方法的命名冲突,但接口可能不受影响。
那么在Java中使用虚拟扩展方法的原因是什么?
答案 0 :(得分:8)
正如我在评论中提到的,这些东西有两个完全不相关的目的。他们唯一的共同点就是名字。
Java虚拟扩展方法允许接口声明方法的默认实现。例如,如果您发布具有其他接口方法但又不想破坏该接口的所有API用户实现的API的新版本(即向后兼容性),这将非常有用。
C#扩展方法只是静态方法的一种方便的语法,所以不要这样做:
MyStaticMethod(someObject, someOtherObject);
你可以这样做:
someObject.MyStaticMethod(someOtherObject);
无需实际更改someObject
的类实现。 C#扩展方法 nothing 与满足接口定义有关(并且不能用于实现此目标)。
这两件事完全不同。