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

dea*_*mon 0 c# java extension-methods java-8

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

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

Ant*_*t P 8

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

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

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

MyStaticMethod(someObject, someOtherObject);
Run Code Online (Sandbox Code Playgroud)

你可以做:

someObject.MyStaticMethod(someOtherObject);
Run Code Online (Sandbox Code Playgroud)

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

这两件事完全不同.