Default Methods In Java

Default methods allows us to add new functionality to new or existing interfaces without breaking the existing functionality of legacy code.

Prior to Java 1.8 interfaces did not allow default interfaces and it was very difficult to modify an existing interface without impacting the class which implemented the interface.For instance if a new method is added to an interface ,it  needs to be implemented in all the classes implementing that interface.

Example

Consider the following interface which is an existing piece of code:-

Java Code Example

The interface is implemented by various branches of the Good Food Restaurant.

Java Code
Java Code

We later plan to add the restaurant working hours .But if we add it to the interface ,the method needs to be implemented in all the three classes.This can be a lot of work especially in big projects where the interface is implemented in several different classes and multiple new method are added in the interface.

Default method comes to the rescue in all these cases.With default methods its not mandatory for an implementing class to implement the default method , its optional.

Default method in Java

A default method is defined in an interface and if the implementing class do provide the implementation of the default method then it overrides the default method definition.Here’s the summary when you implement an interface that contains a default method:-

  • Do not redefine the default method in the implementing class ,which lets you use the default method definitions whenever it is called.
  • Redefine the default method, in this case it is overridden

Extending an interface with a default method

The following rules apply when you extend an interface that contains a default method along with one more scenario:-

  • Do not redefine the default method in the implementing class ,which lets you use the default method definitions whenever it is called.
  • Redefine the default method, in this case it is overridden
  • Redeclare the default method which makes it abstract.

That’s all about default methods in Java.I hope you enjoyed reading this articles.

Java Lambda Expressions

What are Lambda Expression?

Lambda expressions were introduced in Java 1.8 and it’s the first step towards functional programming.Lambda expressions allow you to treat functionality as a method arguments.The functionality can be passed around to different methods as lambda expressions and executed on demand.It also make the code clean and concise.

In short lambda expressions are basically blocks of code that can be passed around methods as arguments ,assigned to variables and returned from function calls.

Why they are used?

Anonymous classes enable implement a base class or an interface without giving a name.But for classes/interfaces where there is only one method even anonymous classes looks verbose and lengthy.Lambda expression lets you implement single method classes/interfaces in a much more compact way.

Lambda Expression and Functional Interfaces

Lambda expression and functional interfaces go hand in hand. Lambda expressions are used to implement the abstract method of the functional interface. Here’s some of the most commonly used functional interfaces.You can find the complete list of functional interfaces at https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html

Consumers

It’s a built in functional interface in the java.util.function package.It can be used in all the context where an object needs to be consumed and it has a void return type.For instance it can accept some object ,perform some operation on the object and display the result without returning any result.It accepts a single input argument.

Predicates

A functional interface and represents an operation that takes a single input and returns a boolean value.

Function

It represents a function that accepts one argument and returns a result.For instance it can accept an object ,perform some operation on the object and return the modified object.

Suppliers

It represents a function that do not take any arguments but returns a result.

In the lambda expression any of these and many other functional interfaces can be implemented depending on the requirements.

Lambda Expression Syntax

(argument-list) -> {body}  

  • Argument List can be empty or we can have as many arguments as we want
  • Arrow Token (->):- It is used to link arguments with the body
  • Body :- It contains expressions and statements .The curly braces are optional if there is only one statement

Example

We have an employee class and an interface.

Java Code Example
Java Code Example

Without Lambda Expression the code will look like this.We are using anonymous class in this case:-

Without Lambda Expression

With lambda expressions:-

Lambda Expressions

Lambda expressions is pretty versatile feature in Java 1.8 and this article gives you a glimpse of it.

Let me know you inputs on lambda expressions.I would be glad to hear from my readers. Happy Coding 🙂

Anonymous Class in Java

Anonymous classes can be tricky to understand for beginners.Mainly because the syntax can look verbose or at least it looked very confusing to me when I started my career as a java developer.So let’s talk anonymous classes today.

Anonymous classes were introduced in java to make code more concise and reduce the lines of code.Here’s some facts about anonymous classes

  • We can declare and instantiate an anonymous class at the same time.
  • They do not have a name.
  • An anonymous class have access to the members of its enclosing class.
  • An anonymous class can not access local variable in its enclosing scope that are not final or effectively final.
  • A variable declaration in an anonymous shadows any variable in its enclosing class with the same name
  • Can not declare static initialization blocks in anonymous classes.
  • Can not declare a constructor in anonymous classes

Example of anonymous class:-

Anonymous Class Example

When you run the program , you will get the following output:-

Syntax of Anonymous Classes:-

An anonymous class is an expression.It contains class definition inside the curly braces.

It has the following pieces:-

  • It starts with the new operator.
  • The name of the interface to implement or the class name.
  • Parenthesis that contain arguments to the constructor just the way we do it in a normal object instantiation.
  • A body of the anonymous class.The body starts and ends with curly braces and colon at the end of the ending braces

You can declare the following in anonymous classes:-

  • Extra Methods which are not originally declared in the interface or the class you are implementing
  • Initialization blocks
  • Fields
  • Local Classes

You can create an anonymous class from an interface or a class or an abstract class.

References :- Oracle Docs

That’s all about anonymous classes . I hope you enjoyed reading about anonymous classes.Have fun with coding.

How to Configure Java 1.8 On Windows

In this post I am going to explain how to install Java 1.8 on your machine and verify the same.

Here’s the steps:-

Install Java 1.8

You can install Java1.8 from Oracle website.Here’s the link:-

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Install Java 1.8

You will see there are two executable files for windows, one for 64 bit and another for 86 bit.Check you System specification by going to Control Panel -> System and Security ->System.

System Speciifications

You need to download the executable file and run it on your local machine.By default the java package will be installed under C -> Program Files->Java. But you can change the path as per your specifications.

Install Java

After your java package is installed you will get the following screen:-

Java Installation

Set Environment Variables

You need the specify the path to the java folder using the PATH variable under Environment variables of your machine. You can access the environment variables of your machine by right click on My Computer or This PC ->Properties

Set environment variables

Set the Variables

User Variables:- 

JAVA_HOME :- C:\Program Files\Java\jdk1.8.0_221

CLASS_PATH:- %JAVA_HOME%\lib;%JAVA_HOME%\jre\lib

set variables

Environment Variable

Add the following in the path variable:- 

PATH:- your-unique-entries;%JAVA_HOME%\bin

Verify Java Installation

Check if Java is correctly installed on your machine.Go to command prompt/terminal and type the following command:-
java -version

Verify Java Installation

Troubleshooting

If in the command prompt its shows that the java is not recognized as a command, revisit the variable and their paths.You will get this error when the user variable and environment variable paths do not point to the correct location of java folder.

Another reason might be that the Java package is not installed properly ,check your bin folder and jre folder.If required reinstall the java package and following the above steps again


How to fix build error related to Jacoco Test Coverage

Code coverage is a software metric used to measure how many lines of code is executed during automated tests.

Jacoco is a code coverage report generator for Java Projects. You need to add the maven plugin for jacoco and get the code coverage reports.

Jacoco Plugin dependency in pom.xml:-

Jacoco Plugin Dependency




You can also configure the code coverage ratio in the plugin by using the rules tag like this:-

Configuration and rule tag

You can either write the covered ratio as 10% or 0.10 .

Sometimes we get a build error like following 

Jacoco Build Error

To fix this issue simply add more test cases in the module which is showing the build failure.

For instance in the above stack trace the module (gcmms-api-client) is showing coverage ratio is 0.09, but expected minimum is 0.10 so simply add more test cases in this module and build the project again.The issue will be resolved.