Looks good, please file the request into JIRA, so it won't get lost.
Thanks,
-Martin
On 02/18/2014 06:25 PM, anton nashatyrev wrote:
Hello All,
I'd like to add my 2 cents to lambdafication of JavaFX:
Recently I was working on a fix in the JFX and used convenient JFX
beans feature - 'select binding':
javafx.beans.binding.Bindings.select*(ObservableValue? root,
java.lang.String... steps)
I.e. to select some chain of properties one should write something
like:
BooleanBinding bb = Bindings.selectBoolean(control.sceneProperty(),
window, isShowing);
When having templates and lambdas this API looks legacy. This kind
of usage is not type-safe, may lead to runtime errors and involves
reflection in the implementation.
The idea is to use type-safe functional-style 'selector' like this:
@FunctionalInterface
public interface SelectorT, E {
ObservableValueE selectValue(T t);
}
and the helper interface (class):
public interface SelectElementE {
K SelectElementK select(SelectorE, K p);
K extends Boolean BooleanBinding selectBoolean(SelectorE, K p);
K extends Integer IntegerBinding selectInteger(SelectorE, K p);
K extends LongLongBinding selectLong(SelectorE, K p);
K extends Float FloatBinding selectFloat(SelectorE, K p);
K extends Double DoubleBinding selectDouble(SelectorE, K p);
K extends String StringBinding selectString(SelectorE, K p);
K ObjectBinding selectObject(SelectorE, K p);
}
The new Bindings method replacing all select*() methods:
publci static E SelectElementE select(ObservableValueE o);
With the new API the example above would look like:
BooleanBinding bb = Bindings.select(control.sceneProperty()).
select(s - s.windowProperty()).
selectBoolean(w - w.showingProperty());
The benefits of the new API:
* Static type checking - no chances for a mistake when selecting long
chain of properties
* IDE code assisting for property selection
* not restricted to properties only, but might be used with any
observable. I.e. one may want to select an element from observable
collection at any selection step
* might be implemented without reflection, which may result in some
performance gain
This change is of course might be targeted to JDK9 only.
Thanks for taking a look!
Anton.
On 15.02.2014 3:35, Stephen F Northover wrote:
Hello all,
Mark it on your calendar. Feb 25th is OpenJFX Lambda day. On that
day, we will lock the code base, lambdify everything in sight, and
then open up for business again. One thing that we won't be doing
right away is converting our code to use streams and other JDK8
features but this is inevitable (perhaps after 8u20). We are part of
the JDK, we ship with the JDK so we will use features from the JDK.
Like Lambda's to the slaughter the Android and iOS ports of OpenJFX
will be affected. We've been discussing the use of RetroLambda on
and off in JIRA for a while and it seems that it will work for both
ports. We care about these ports and it is possible that Lambda Day
will slip for one reason or another. For one thing, the lambdifying
tools blow up some of the source making lambda conversion a somewhat
manual process. Hopefully we can get the bugs fixed before the day.
On that day, I will be listening to 'The Lambda Lies Down on
Broadway all day. Those of you with children might prefer Mary had
a little Lambda. Despite being called The Lambda Police, I am and
old Lisper and a card carrying member of the Knights of the Lambda
Calculus. Look that one up. I know the founder personally but will
never tell who it is.
Steve