sir*_*lot 3 c# java extension-methods
我理解C#扩展方法,因为它们允许您向已经关闭的类定义添加新方法.Java防御者/扩展方法似乎完全不同.例如:
public interface Interfacable {
public void regular();
public default void defender() { System.out.println("I am protected"); };
}
Run Code Online (Sandbox Code Playgroud)
好吧,所以我知道你可以用Java扩展方法做'trait -y'的事情,但我不明白为什么它被称为同一个东西(一个"扩展"),如果它似乎呃,不做同样的事情.有人可以帮我解决这个问题吗?
这些添加的原因是为Java添加闭包的一部分,因此有一个简单的升级路径,如集合类.添加闭包的挑战是,现在有很多功能要添加到标准集合中.但是,如果将这些添加到现有接口,则会破坏这些接口的任何实现.解决此问题的方法是使用新方法添加其他接口.这可以在没有虚拟扩展方法的情况下实现,但是它有其自身的缺点.也就是说,需要在使用之前添加新接口的实现.由于今天可能有很多实现,因此升级所有这些实现可能需要很长时间.然而,同时,您想要添加的方法对实现非常不可知.它们应该基本上做同样的事情,至少在基本情况下.构建它的团队决定处理该案例的方式是启用可以覆盖的默认行为的规范.通过添加接口的方式,功能就在那里,由图书馆作者决定他们想要编写不同的实现.关键是他们没有,或者有一个止损功能,直到他们这样做.通过添加接口的方式,功能就在那里,由图书馆作者决定他们想要编写不同的实现.关键是他们没有,或者有一个止损功能,直到他们这样做.通过添加接口的方式,功能就在那里,由图书馆作者决定他们想要编写不同的实现.关键是他们没有,或者有一个止损功能,直到他们这样做.
很长一段时间它们基本上就像特征一样,你是正确的它们与C#中的扩展方法不同.从我所读到的,最初的实现是更多的C#.但是,由于样式的限制(即无法覆盖功能)而缺乏能够使用反射,因此决定以这种方式使用它们会发现它们.尽管实施方法发生了变化,但似乎名称仍然存在.
见写了说明完整详细的虚拟扩展方法.
| 归档时间: |
|
| 查看次数: |
906 次 |
| 最近记录: |