Действительно ли там кто-либо эквивалентен из Реактивных Расширений (.NET) для Java?
О Rx (реактивные расширения)
Rx является библиотекой для создания асинхронных и основанных на событии программ с помощью заметных наборов.
Я знаю о механизмах правила тех, которые Пускают слюни от JBOSS, но являются там некоторым другим путем, который ближе к подходу Microsoft.NET?
Я не знаю ни об одном - и, честно говоря, это было бы трудно сделать таким аккуратным способом. С потоковой обработкой все в порядке; Java вполне способна работать с потоками... но в настоящее время язык просто не поддерживает соответствующие функции.
Одна из особенностей дизайна LINQ заключается в том, что все основано на интерфейсах, а затем используются методы расширения для добавления дополнительной функциональности. Это позволяет читать код бегло - представьте, если бы вам пришлось написать:
IObservable<int> = Observable.Select(
Observable.Where(
source, x => x.SomeCondition)
x => x.SomeProjection);
Ик. Метод расширения гораздо более изящен:
IObservable<int> = source.Where(x => x.SomeCondition)
.Select(x => x.SomeProjection);
Теперь версия Java могла бы быть основана на абстрактном базовом классе, но это потеряло бы часть элегантности.
Далее идут лямбда-выражения и преобразования групп методов - они действительно являются фундаментальными для LINQ в целом; ближайший эквивалент в Java (анонимные внутренние классы) слишком уродлив, чтобы использовать его везде, где вы бы использовали лямбда-выражение в C#.
В принципе, Java-версия Rx была бы осуществима, но она не была бы почти столь же элегантной, как версия на C# - вероятно, именно поэтому она не была сделана, насколько я знаю. Возможно, существуют и другие "асинхронные" библиотеки для Java, но они вряд ли будут такими же полными и изящными, как Rx.
Возможно возможно, что изменения в Java 7 сделают это более осуществимым; насколько я знаю, методы расширения не вводятся, но версия абстрактного базового класса будет разумной, если синтаксис лямбд окажется в порядке...
Вы можете рассмотреть возможность переноса raix (wiki), написанного на ActionScript 3, на Java 7, когда она появится. Проект (мой собственный) имеет открытый исходный код и включает в себя модульные тесты "черного ящика" версии фреймворка .NET для обеспечения совместимости.
Как и Java, AS3 не поддерживает ни методы расширения, ни лямбда-выражения, поэтому реализация может быть похожей. При этом вам придется быть осторожным с условиями гонки, поскольку AVM не поддерживает потоки, поэтому в RxAs нет кода блокировки.