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.
- If Your Programming Language Doesn't Work, Give Scala A Try
- Programming in Scala: A Comprehensive Step-By-Step Guide
- Programming In Scala
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:
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<Block> blocks = /* … */
- int total = blocks.stream()
- .filter(b -> b.GetValue() > 100)
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.
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 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.