为什么Java没有方法委托?
Sun的Java gurunaths(natha नाथ =梵文,意为神-主-保护者)应该居高临下地接受代表的必要性,并将其起草成Java规范。
在 C# 中,我可以将一个方法作为作为委托引用的处理程序进行传递,而不需要因为需要用 Java 传递一个方法而去麻烦创建一个类。
是什么原因使它变得不必要(除了引用笨拙地使用一个全新的类)或不利于Sun决定不在Java中使用它?与委托相比,匿名创建类或实现接口有什么优势?我想不出任何东西,对吧?
Sun的Java gurunaths(natha नाथ =梵文,意为神-主-保护者)应该居高临下地接受代表的必要性,并将其起草成Java规范。
在 C# 中,我可以将一个方法作为作为委托引用的处理程序进行传递,而不需要因为需要用 Java 传递一个方法而去麻烦创建一个类。
是什么原因使它变得不必要(除了引用笨拙地使用一个全新的类)或不利于Sun决定不在Java中使用它?与委托相比,匿名创建类或实现接口有什么优势?我想不出任何东西,对吧?
以下是 Tom Ball 对 Microsoft 提议将它们添加到 Java 中的描述,以及 Sun 拒绝它们的原因。
IMO,Java应该在十二年前关闭。吉拉德·布拉查(Gilad Bracha)主张关闭,没有人听。用他自己的话说:
我个人主张自1997/98年以来增加关闭。当我回想起我当时得到的回应时,我的血压仍然明显上升:“我们的客户没有要求它,所以为什么要添加它?
可悲,但真实。
[次要编辑]
首先,我要说的是,我不反对也不赞成在 Java 中添加委托。我只是在解释背景。
首先,Sun的Java团队在语言的发展方面传统上更加保守(与C#团队相比)。
其次,在 Java 中添加委托构造可能需要引入一个新关键字,例如:“delegate”。这将破坏现有代码,其中存在名为“delegate”的变量。
第三,有一种设计原则叫做“单一选择原则”http://en.wikipedia.org/wiki/Single_choice_principle。当应用于语言设计时,这意味着程序员应该只有一种明显的方法来实现某些目标。或者,换句话说,多重选择是有风险的。将委托引入 Java 将违背这一原则,因为它们的行为可以通过匿名类来实现。
[当然,这一原则不应从字面上理解。如果是这样的话,那么我们将使用一个很好的旧图灵机进行编程。我猜太阳报的家伙们认为,代表们并不构成超过单一选择违规的好处。