<?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; java8</title>
	<atom:link href="http://blog.sibvisions.com/tag/java8/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.sibvisions.com</link>
	<description>Blog @ SIB Visions</description>
	<lastBuildDate>Fri, 10 Apr 2026 10:13:07 +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>
		<item>
		<title>JVx and Java 8, Events and Lambdas</title>
		<link>https://blog.sibvisions.com/2015/01/28/jvx-and-java-8-events-and-lambdas/</link>
		<comments>https://blog.sibvisions.com/2015/01/28/jvx-and-java-8-events-and-lambdas/#comments</comments>
		<pubDate>Wed, 28 Jan 2015 13:15:04 +0000</pubDate>
		<dc:creator>rzenz</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[java8]]></category>
		<category><![CDATA[JVx]]></category>

		<guid isPermaLink="false">http://blog.sibvisions.com/?p=3657</guid>
		<description><![CDATA[With version 8, Java has received support for lambda expressions and of course also JVx and its users directly profit from this new feature.
In case you do not know what a lambda expression is, it is basically the possibility to inline functions, sometimes also called "anonymous functions" and should not be confused with "anonymous classes", [...]]]></description>
			<content:encoded><![CDATA[<p>With version 8, Java has received support for <a href="https://en.wikipedia.org/wiki/Anonymous_function">lambda expressions</a> and of course also JVx and its users directly profit from this new feature.</p>
<p>In case you do not know what a lambda expression is, it is basically the possibility to inline functions, sometimes also called "anonymous functions" and should not be confused with "anonymous classes", which Java has supported for quite some time now. Let's look at a simple example of anonymous classes:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="kw1">new</span> <span class="kw3">Thread</span><span class="br0">&#40;</span><span class="kw1">new</span> <span class="kw3">Runnable</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> run<span class="br0">&#40;</span><span class="br0">&#41;</span> <br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// your code</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>This launches a thread that does <em>something</em>. The Runnable in our example is the anonymous class. Now with the new lambda support we don't need to write the interface implementation, but can directly tell it to run a function:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="kw1">new</span> <span class="kw3">Thread</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">-&gt;</span> <span class="br0">&#123;</span> <span class="coMULTI">/* your code */</span> <span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>The empty parentheses and the arrow indicate a new anonymous function. The parentheses contain the list of parameters of the function that is going to be invoked, in our case it is empty because Runnable.run() does not have any parameters. So the anatomy of a lambda looks like this:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="kw1">new</span> <span class="kw3">Thread</span><span class="br0">&#40;</span><span class="br0">&#40;</span>optional explicit cast to target <span class="kw1">interface</span><span class="br0">&#41;</span><span class="br0">&#40;</span>parameters<span class="br0">&#41;</span> <span class="sy0">-&gt;</span> <br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; function body<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>Internally this is still compiled into an anonymous class, but the code becomes a lot smoother and easier to read.</p>
<p>Additionally it is now possible to reference functions directly, like this:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="co1">// instance</span><br />
<span class="kw1">new</span> <span class="kw3">Thread</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="sy0">::</span>worker<span class="br0">&#41;</span>.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="co1">// static</span><br />
<span class="kw1">new</span> <span class="kw3">Thread</span><span class="br0">&#40;</span>YourWorkClass<span class="sy0">::</span>worker<span class="br0">&#41;</span>.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>Especially the last possibility is very exciting, as our event system has a very similar mechanism but <a href="http://blog.sibvisions.com/2014/07/15/visionx-rnd-news-ide-integration/">until recently did not have compile-time safety and checks</a>.</p>
<div style="margin: 0; line-height: 1px; height: 5px; display: block;"></div>
<p>The new lambda feature is backwards compatible and can easily be used in JVx. Here is a simple test window that shows the new lambda expressions in combination with JVx events:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="kw1">import</span> <span class="co2">javax.rad.genui.component.UIButton</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">javax.rad.genui.container.UIFrame</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">javax.rad.genui.layout.UIBorderLayout</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">javax.rad.ui.event.UIActionEvent</span><span class="sy0">;</span></p>
<p><span class="kw1">public</span> <span class="kw1">class</span> LambdaShowcaseFrame <span class="kw1">extends</span> UIFrame <br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">public</span> LambdaShowcaseFrame<span class="br0">&#40;</span><span class="br0">&#41;</span> &nbsp;<br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; initializeUI<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> doJVxAction<span class="br0">&#40;</span>UIActionEvent pActionEvent<span class="br0">&#41;</span> <br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">System</span>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;JVx&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> doLambda2<span class="br0">&#40;</span>UIActionEvent pActionEvent<span class="br0">&#41;</span> <br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">System</span>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;Lambda 2&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw4">void</span> initializeUI<span class="br0">&#40;</span><span class="br0">&#41;</span> <br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//before Java 8</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; UIButton buttonJVx <span class="sy0">=</span> <span class="kw1">new</span> UIButton<span class="br0">&#40;</span><span class="st0">&quot;JVx Style&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; buttonJVx.<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;doJVxAction&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// with Java 8</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; UIButton buttonLambda1 <span class="sy0">=</span> <span class="kw1">new</span> UIButton<span class="br0">&#40;</span><span class="st0">&quot;Lambda 1&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; buttonLambda1.<span class="me1">eventAction</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="me1">addListener</span><span class="br0">&#40;</span>pActionEvent <span class="sy0">-&gt;</span> <span class="kw3">System</span>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;Lambda 1&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; UIButton buttonLambda2 <span class="sy0">=</span> <span class="kw1">new</span> UIButton<span class="br0">&#40;</span><span class="st0">&quot;Lambda 2&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; buttonLambda2.<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>doLambda2<span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>
&nbsp; &nbsp; &nbsp; &nbsp; setLayout<span class="br0">&#40;</span><span class="kw1">new</span> UIBorderLayout<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; add<span class="br0">&#40;</span>buttonJVx, UIBorderLayout.<span class="me1">NORTH</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; add<span class="br0">&#40;</span>buttonLambda1, UIBorderLayout.<span class="me1">WEST</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; add<span class="br0">&#40;</span>buttonLambda2, UIBorderLayout.<span class="me1">EAST</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
</div>
]]></content:encoded>
			<wfw:commentRss>https://blog.sibvisions.com/2015/01/28/jvx-and-java-8-events-and-lambdas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
