<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog @ SIB Visions &#187; Lambda</title>
	<atom:link href="http://blog.sibvisions.com/tag/lambda/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.sibvisions.com</link>
	<description>Blog @ SIB Visions</description>
	<lastBuildDate>Mon, 13 Apr 2026 09:47:01 +0000</lastBuildDate>
		<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>JVx and Java 8, Better Lambda support in 2.4</title>
		<link>https://blog.sibvisions.com/2015/12/17/jvx-and-java-8-even-better-lambda-support-in-2-4/</link>
		<comments>https://blog.sibvisions.com/2015/12/17/jvx-and-java-8-even-better-lambda-support-in-2-4/#comments</comments>
		<pubDate>Thu, 17 Dec 2015 12:19:12 +0000</pubDate>
		<dc:creator>rzenz</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[java8]]></category>
		<category><![CDATA[JVx]]></category>
		<category><![CDATA[Lambda]]></category>

		<guid isPermaLink="false">http://blog.sibvisions.com/?p=5272</guid>
		<description><![CDATA[Already at the beginning of this year we started to improve the support for Lambdas in JVx. Now with 2.4 only a few days away, I'm happy to announce that we managed to improve it dramatically! Our events are now supporting basically every method which you can imagine as handler.
But let's not get ahead of [...]]]></description>
			<content:encoded><![CDATA[<p>Already at the beginning of this year we started to <a href="http://blog.sibvisions.com/2015/01/28/jvx-and-java-8-events-and-lambdas/">improve the support for Lambdas in JVx</a>. Now with 2.4 only a few days away, I'm happy to announce that we managed to improve it dramatically! Our events are now supporting basically every method which you can imagine as handler.</p>
<p>But let's not get ahead of ourselves, shall we? As most of you know, our own event handler scheme had support for basically five different variations of listeners:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="kw1">private</span> <span class="kw4">void</span> initializeUI<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; button.<span class="me1">eventAction</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">addListener</span><span class="br0">&#40;</span><span class="kw1">new</span> UIActionListener<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> ... <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; button.<span class="me1">eventAction</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">addListener</span><span class="br0">&#40;</span><span class="kw1">this</span>, <span class="st0">&quot;doActionA&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; button.<span class="me1">eventAction</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">addListener</span><span class="br0">&#40;</span><span class="kw1">this</span>, <span class="st0">&quot;doActionB&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; button.<span class="me1">eventAction</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">addListener</span><span class="br0">&#40;</span><span class="kw1">this</span>, <span class="st0">&quot;doActionC&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; button.<span class="me1">eventAction</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">addListener</span><span class="br0">&#40;</span><span class="kw1">this</span>, <span class="st0">&quot;doActionD&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw1">public</span> <span class="kw4">void</span> doActionA<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">// A simple method with no parameters.</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw1">public</span> <span class="kw4">void</span> doActionB<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw1">throws</span> <span class="kw3">Exception</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">// A simple method which can throw *any* exception.</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw1">public</span> <span class="kw4">void</span> doActionC<span class="br0">&#40;</span>UIActionEvent pActionEvent<span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">// A method with the correct signature.</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw1">public</span> <span class="kw4">void</span> doActionD<span class="br0">&#40;</span>UIActionEvent pActionEvent<span class="br0">&#41;</span> <span class="kw1">throws</span> <span class="kw3">Exception</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">// A method with the correct signature which can throw *any* exception.</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>This scheme allows us to wire up basically any method to the event, and even to wire the same method to different events. Behind the scenes there is some reflection magic going on which I won't describe here, but with Lambdas entering the stage this changes quite a bit. The good thing about Lambdas is that they are fitting neatly into the already existing interface structure, so you can replace any interface implementation which has only one method with a lambda.</p>
<p>That means that you can do something like this:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="kw1">private</span> <span class="kw4">void</span> initializeUI<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; button.<span class="me1">eventAction</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">addListener</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="sy0">::</span>doActionA<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw1">private</span> <span class="kw4">void</span> doActionA<span class="br0">&#40;</span>UIActionEvent pActionEvent<span class="br0">&#41;</span> <span class="kw1">throws</span> <span class="kw3">Exception</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">// The correct implementation.</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>But if you wanted to use a method without parameters you were out of luck until now, because listener interfaces always expect a parameter. With 2.4 there will be a new interface, called IRunnable, which provides a method which does not accept any parameter and can throw any exception and the EventHandler will also accept listeners which implement this interface. That means that the scheme outlined above is now fully possible with lambdas.</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="kw1">private</span> <span class="kw4">void</span> initializeUI<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; button.<span class="me1">eventAction</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">addListener</span><span class="br0">&#40;</span><span class="kw1">new</span> UIActionListener<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> ... <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; button.<span class="me1">eventAction</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">addListener</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="sy0">::</span>doActionA<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; button.<span class="me1">eventAction</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">addListener</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="sy0">::</span>doActionB<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; button.<span class="me1">eventAction</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">addListener</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="sy0">::</span>doActionC<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; button.<span class="me1">eventAction</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">addListener</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="sy0">::</span>doActionD<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw1">private</span> <span class="kw4">void</span> doActionA<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">// A simple method with no parameters.</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw1">private</span> <span class="kw4">void</span> doActionB<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw1">throws</span> <span class="kw3">Exception</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">// A simple method which can throw *any* exception.</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw1">private</span> <span class="kw4">void</span> doActionC<span class="br0">&#40;</span>UIActionEvent pActionEvent<span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">// A method with the correct signature.</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw1">private</span> <span class="kw4">void</span> doActionD<span class="br0">&#40;</span>UIActionEvent pActionEvent<span class="br0">&#41;</span> <span class="kw1">throws</span> <span class="kw3">Exception</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">// A method with the correct signature which can throw *any* exception.</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>And more good news, did you notice that the visibility of these methods changed from public to private? With the new Lambda scheme these methods no longer need to be public, they can have any visibility and will still work as intended.</p>
<p>So JVx 2.4 is <i>the</i> release when it comes to Lambda support, and everyone who has the possibility to already use Java 8 can now enjoy full support for them.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.sibvisions.com/2015/12/17/jvx-and-java-8-even-better-lambda-support-in-2-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
