Реактивные расширения для Java

Действительно ли там кто-либо эквивалентен из Реактивных Расширений (.NET) для Java?

О Rx (реактивные расширения)

Rx является библиотекой для создания асинхронных и основанных на событии программ с помощью заметных наборов.

Я знаю о механизмах правила тех, которые Пускают слюни от JBOSS, но являются там некоторым другим путем, который ближе к подходу Microsoft.NET?

11
задан Jesper 16 May 2010 в 19:12
поделиться

2 ответа

Я не знаю ни об одном - и, честно говоря, это было бы трудно сделать таким аккуратным способом. С потоковой обработкой все в порядке; 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 сделают это более осуществимым; насколько я знаю, методы расширения не вводятся, но версия абстрактного базового класса будет разумной, если синтаксис лямбд окажется в порядке...

11
ответ дан 3 December 2019 в 02:01
поделиться

Вы можете рассмотреть возможность переноса raix (wiki), написанного на ActionScript 3, на Java 7, когда она появится. Проект (мой собственный) имеет открытый исходный код и включает в себя модульные тесты "черного ящика" версии фреймворка .NET для обеспечения совместимости.

Как и Java, AS3 не поддерживает ни методы расширения, ни лямбда-выражения, поэтому реализация может быть похожей. При этом вам придется быть осторожным с условиями гонки, поскольку AVM не поддерживает потоки, поэтому в RxAs нет кода блокировки.

1
ответ дан 3 December 2019 в 02:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: