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