Electronicdesign 9314 106951promo

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.

Sponsored Recommendations

What are the Important Considerations when Assessing Cobot Safety?

April 16, 2024
A review of the requirements of ISO/TS 15066 and how they fit in with ISO 10218-1 and 10218-2 a consideration the complexities of collaboration.

Wire & Cable Cutting Digi-Spool® Service

April 16, 2024
Explore DigiKey’s Digi-Spool® professional cutting service for efficient and precise wire and cable management. Custom-cut to your exact specifications for a variety of cable ...

DigiKey Factory Tomorrow Season 3: Sustainable Manufacturing

April 16, 2024
Industry 4.0 is helping manufacturers develop and integrate technologies such as AI, edge computing and connectivity for the factories of tomorrow. Learn more at DigiKey today...

Connectivity – The Backbone of Sustainable Automation

April 16, 2024
Advanced interfaces for signals, data, and electrical power are essential. They help save resources and costs when networking production equipment.

Comments

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