Хорошо, это будет мое избиение умирающей лошади в третий раз.
Однако этот вопрос отличается от моих предыдущих двух о закрытиях/делегатах, которые спрашивают о планах для делегатов и каковы прогнозируемые спецификации и реализация для закрытия.
Этот вопрос связан с тем, почему сообщество Java пытается определить 3 разных типа замыканий, когда мы могли просто украсть всю концепцию блокировки, акций и ствола делегатов от нашего любимого и дружелюбного соседа - Microsoft.
Есть два нетехнических вывода, на которые я бы очень захотел вскочить:
- Сообщество Java должно сохранить свою гордость за счет того, что вам нужно изо всех сил пытаться изо всех сил, не поддаваясь заимствованию каких-либо концепций Microsoft или иным образом оправдывая блеск Microsoft.
- Делегаты - запатентованная технология Microsoft.
Хорошо, помимо вышеупомянутых двух возможностей,
Q1. Есть ли недостаток или неадекватность делегатов в .NET-стиле, что три (или более) формы закрытия будут обращаться?
Q2. Я прошу об этом, переходя между Java и С#, и это меня интригует, что делегаты С# делают именно то, что мне нужно. Существуют ли функции, которые будут реализованы в закрытии, которые в настоящее время недоступны делегатам С#? Если да, то каковы они, потому что я не вижу, что мне нужно больше, чем предоставили мне делегаты С#?
Q3. Я знаю, что одной из проблем, связанных с внедрением закрытий/делегатов в java, является сокращение ортогональности языка, где более одного способа подвергается выполнению конкретной задачи. Стоит ли уровень свертки и время, затрачиваемое на то, чтобы избегать делегатов, чтобы гарантировать, что java сохраняет свой уровень ортогональности? В реляционном дизайне мы знаем, что желательно нарушить ортогональность, часто адекватно удовлетворяя только 2-й нормальной форме. Почему для простоты java не может быть сокращено ортогональность и OO-n?
Q4. Архитектура JVM технически ограничена в реализации делегатов в формате .NET. Если эта причина WERE (сослагательное наклонение, чтобы подчеркнуть маловероятность) истинна, то почему не могут быть скрыты три предложения закрытия за простым ключевым словом или аннотацией делегата: если мы не любим использовать @delegate, мы могли бы использовать @method. Я не вижу, как формат заявления делегата более сложный, чем три предложения закрытия.