为什么Java没有方法委托?

Ble*_*eek 12 c# java delegates

Sun的Java gurunaths(nathaनाथ= sanskrit for deity-master-protector)应该屈服于接受代表的必要性并将其草拟为Java规范.

在C#中,我可以将一个方法作为委托作为委托引用,而不需要因为我需要在Java中传递一个方法来创建一个类.

是什么原因导致它不必要(除了引用笨拙的使用一个全新的类为此目的)或不利的是Sun决定不用Java?创建类或匿名实现接口有哪些优势超过代理?我什么都想不到,可以吗?

Ita*_*man 15

[次要编辑]

首先我要说的是,我不反对或赞成向Java添加委托.我只是在解释背景.

首先,Sun的Java团队传统上比语言的演变更保守(与C#团队相比).

其次,将委托构造添加到Java中可能需要引入新的关键字,例如:"delegate".这将破坏存在名为"delegate"的变量的现有代码.

第三,这种设计原则被称为"单一选择原则" http://en.wikipedia.org/wiki/Single_choice_principle.当应用于语言设计时,它意味着程序员应该只有一种明显的方法来实现某些东西.或者,换句话说,多种选择是有风险的.将代理引入Java将违背这一原则,因为他们的行为可以通过匿名类来实现.

[当然,这个原则不应该从字面上理解.如果是那时我们将使用一台好的旧图灵机进行编程.我想太阳队员认为代表们不会构成超过单一选择违规的好处]


Cha*_*tni 15

以下是Tom Ball对微软提议将它们添加到Java以及Sun拒绝它们的原因.

IMO,Java应该在十二年前关闭.吉拉德·布拉查(Gilad Bracha)主张关闭,没有人听.用他自己的话说:

我个人主张自1997/98年以来增加封闭.当我回忆起当时的反应时,我的血压仍然明显上升:"我们的客户不是要求它,所以为什么要添加呢?".

悲伤,但是真的.

  • 报价为+1.可悲的是,许多其他组织都是如此 (2认同)

Meh*_*ari 6

简单.

通过不将委托的概念引入Java,他们使语言更简单.就像没有属性,索引器,....

(顺便说一下,使用更简单的语言并不一定更简单;可能他们应该添加代理,但这不是他们做出设计决策的方式)

  • 没有代表正在使我的项目变得复杂和庞大,无处不在的匿名类和无关接口. (3认同)
  • @Bozho:也许纯粹的面向对象设计不是解决问题的最佳方式,而功能范例更好.毕竟,我们OOP原则的最终目标是创建更好的软件,而不是盲目地遵循它们. (3认同)
  • @ h2g2java:在我的*纯粹的个人*意见(免责声明:我最喜欢的语言是C#),我同意你的观点,我认为Java的设计是如此虔诚以至于"纯粹".他们为了语言的纯洁性和简洁性而牺牲了易用性.然而,有些人(如设计师)肯定不同意.毕竟,设计一门语言很难,你应该做出很多权衡.如果您为语言添加任何可能的功能,您将最终重新发明C++;). (2认同)
  • 这是非常正确的,但_maybe_使用功能技术看起来像"简单的路径",而正确的(在可维护性,可读性,稳定性方面使软件更好的那个)位于OOP领域; 也许是一种设计模式. (2认同)