Java 8向类添加扩展/默认方法

我正在寻找与C#扩展方法功能等效的Java。现在,我一直在阅读有关Java 8的默认方法的信息,但据我所知,我只能将它们添加到接口中。

…是否有任何语言功能可让我为未实现接口的最终类​​编写扩展方法?(我宁愿不必包装它…)

回答:

对于以扩展类型作为第一个参数的静态方法,C#扩展方法只是语法糖。Java默认方法完全不同。要模仿C#扩展方法,只需编写常用的静态方法。但是,您将不会食用合成糖。Java没有此功能。

Java默认方法是真正的虚拟方法。例如,它们可以被覆盖。考虑XI声明默认foo()方法的接口继承的类。如果X或其任何超类未声明自己的foo()方法,X则将获取的foo()实现I。现在,子类YX可以覆盖X.foo()像通常的方法。因此,默认方法不仅是语法糖。它们是方法覆盖和继承机制的真正扩展,其他语言功能无法模仿。

默认方法甚至需要特殊的VM支持,因此它们甚至不只是编译器功能:在类加载期间,必须检查类的层次结构以确定它将继承哪些默认方法。因此,此决定是在运行时而不是在编译时做出的。很棒的事情是,当继承的接口获得新的默认方法时,您不必重新编译类:VM将在类加载时将新方法分配给它。

以上是 Java 8向类添加扩展/默认方法 的全部内容, 来源链接: utcz.com/qa/423157.html

回到顶部