Java中扩展方法的实际用途是什么

本文关键字:是什么 扩展 方法 Java | 更新日期: 2023-09-27 18:19:36

我了解C#扩展方法,因为它们允许您将新方法添加到已经关闭的类定义中。Java捍卫者/扩展方法似乎完全不同。例如:

public interface Interfacable {
    public void regular();
    public default void defender() { System.out.println("I am protected"); };
}

好吧,我知道你可以用Java扩展方法做一些"trait-y"的事情,但我不明白为什么它被称为同一件事("扩展"),如果它看起来不做同样的事情。有人能帮我吗?

Java中扩展方法的实际用途是什么

添加这些的原因是向Java添加闭包的一部分,这样就可以轻松地升级到集合类之类的东西。添加闭包的挑战在于,现在有很多函数需要添加到标准集合中。但是,如果将这些添加到现有接口中,则会破坏这些接口的任何实现。解决这个问题的方法是使用新方法添加一个额外的接口。这在没有虚拟扩展方法的情况下是可能的,但是,它有自己的缺点。也就是说,在使用新接口之前,需要添加该接口的实现。由于现在可能有很多实现,所以升级所有这些实现可能需要很长时间。然而,同时,您想要添加的方法对实现来说是非常不可知的。他们应该做基本相同的事情,至少在基本情况下是这样。构建该案例的团队决定处理该案例的方式是启用可以重写的默认行为的规范。这样,通过添加接口,功能就在那里了,这取决于库编写器是否要编写不同的实现。关键是他们不必这样做,或者在他们这样做之前有一个权宜之计

总之,它们基本上表现得像特征,你是对的,它们与C#中的扩展方法不同。从我所读到的内容来看,它的原始实现更多的是C#。然而,由于风格的限制(即无法覆盖功能)和缺乏使用反射的能力,决定以这种方式使用它们确实发现了它们。尽管实现方法发生了变化,但这个名字似乎还是沿用了下来。

有关详细信息,请参阅解释虚拟扩展方法的文章。