Image

Java 8 Arrives

April 4, 2014
Java 8 is into the wild and it brings along a number of new and useful features like lambda expressions and the streams API.

Java 8 is out the gate. It’s big step forward for embedded applications, and a few of its many new features stand out. First is the simplification and unification of the different versions of Java. There is now just Java SE and Java ME, and they are the same versions. Also, Java ME is a proper subset of Java SE.

Related Articles

Java ME now incorporates connected limited device configuration (CLDC), the Generic Connection Framework (GCF), and the Java ME Embedded Profile (MEEP). Even Java SE can fit onto smaller platforms like a microcontroller with 16 Mbytes of RAM and 10 Mbytes of flash.

Next is the inclusion of lambda expressions in the Java language. I used lambda expressions in Lisp, and Java is not in the same league. Lambda expressions in Java are a definite plus, though. A lambda expression is essentially a nameless function. Many applications require a callback function, which allows a programmer to define inline, typically as an argument in a method call.

Download this article in .PDF format
This file type includes high resolution graphics and schematics when applicable.

Lambdas use the -> operator with the argument list on the left and a function body on the right as in:

(String s) -> { System.out.println(s); }

This is a function with a single string argument that prints out the value. Lambdas make a functional programming style easier. They are also handier for embedded applications that use functional arguments. The underlying system has been enhanced to improve support for these new features.

Lambdas play well with another enhancement in Java 8, streams. Java 8’s stream application programming interface (API) specifies a set of interface methods that allow code like this:

List blocks = /* … */

int total = blocks.stream()
                          .filter(b -> b.GetValue() > 100)
                          .sum();

In this example, the blocks list provides a stream object that has its elements filtered and then added together. Methods like filter return a stream that while sum returns a value. The type of the lambda argument for filter is inferred. Inferred types are another enhancement that is useful in almost any context. The argument parentheses for the lambda parameter are also not required since there is a single argument. The lambda body assumes the block element value is obtained using the GetValue method. All the elements whose value is over 100 will be added together.

Type annotations are a new addition that can be used anywhere a type is needed in Java code. For example, one might want to make sure a variable was never set to a null value. The variable must always reference an object. This is what a String definition would look like.

@NonNull String myString;

This is just a simple example. The type annotations can also apply to more complex type definitions. Java does not have a type checking framework, but Java 8 supports pluggable checkers that can do that job. Static analysis tools can do more, though improved type checking can help keep bugs out of code.

Java JVMs can run other programming languages like Groovy and Scala (see “If Your Programming Language Doesn’t Work, Give Scala A Try” at electronicdesign.com). Java 8’s Nashorn Javascript engine adds Javascript to the mix. Javascript has been used a lot on the Web, and it is a completely different language from Java. There are probably more Javascript programmers than Java programmers, but now both can take advantage of Java 8.

Java is yet another language that takes aim at the Internet of Things (IoT). Its advantage is its wide range of communication and middleware that comes as part of it. The SE/ME spread also means sensors can use the lightweight Java ME, and higher-end applications can run Java SE systems. Other useful features include an upgraded date and time API, which was needed to address international date and time issues that were not handled well in earlier versions of Java.

The JavaFX 8 graphics toolkit now includes an embedded graphics stack. The toolkit also now handles HTML5, adds many new user interface controls, and improves 3D support.

About the Author

William Wong Blog | Senior Content Director

Bill Wong covers Digital, Embedded, Systems and Software topics at Electronic Design. He writes a number of columns, including Lab Bench and alt.embedded, plus Bill's Workbench hands-on column. Bill is a Georgia Tech alumni with a B.S in Electrical Engineering and a master's degree in computer science for Rutgers, The State University of New Jersey.

He has written a dozen books and was the first Director of PC Labs at PC Magazine. He has worked in the computer and publication industry for almost 40 years and has been with Electronic Design since 2000. He helps run the Mercer Science and Engineering Fair in Mercer County, NJ.

Sponsored Recommendations

Comments

To join the conversation, and become an exclusive member of Electronic Design, create an account today!