为什么Java有像C#这样的虚拟和非静态扩展方法?

时间:2014-03-12 16:29:32

标签: c# java extension-methods java-8

Java语言设计者决定使用虚拟扩展方法而不是像C#这样的静态扩展方法。静态扩展方法可能导致与未来方法的命名冲突,但接口可能不受影响。

那么在Java中使用虚拟扩展方法的原因是什么?

1 个答案:

答案 0 :(得分:8)

正如我在评论中提到的,这些东西有两个完全不相关的目的。他们唯一的共同点就是名字。

Java虚拟扩展方法允许接口声明方法的默认实现。例如,如果您发布具有其他接口方法但又不想破坏该接口的所有API用户实现的API的新版本(即向后兼容性),这将非常有用。

C#扩展方法只是静态方法的一种方便的语法,所以不要这样做:

MyStaticMethod(someObject, someOtherObject);

你可以这样做:

someObject.MyStaticMethod(someOtherObject);

无需实际更改someObject的类实现。 C#扩展方法 nothing 与满足接口定义有关(并且不能用于实现此目标)。

这两件事完全不同。

相关问题