Java 9:Building Robust Modular Applications
上QQ阅读APP看书,第一时间看更新

Making use of private interface methods

Lambda expressions were a big part of the Java 8 release. As a follow-up to that improvement, private methods in interfaces are now feasible. Previously, we could not share data between non-abstract methods of an interface. With Java 9, this data sharing is possible. Interface methods can now be private. Let's look at some sample code.

This first code snippet is how we might code an interface in Java 8:

    . . . 
public interface characterTravel
{
pubic default void walk()
{
Scanner scanner = new Scanner(System.in);
System.out.println("Enter desired pacing: ");
int p = scanner.nextInt();
p = p +1;
}
public default void run()
{
Scanner scanner = new Scanner(System.in);
System.out.println("Enter desired pacing: ");
int p = scanner.nextInt();
p = p +4;
}
public default void fastWalk()
{
Scanner scanner = new Scanner(System.in);
System.out.println("Enter desired pacing: ");
int p = scanner.nextInt();
p = p +2;
}
public default void retreat()
{
Scanner scanner = new Scanner(System.in);
System.out.println("Enter desired pacing: ");
int p = scanner.nextInt();
p = p - 1;
}
public default void fastRetreat()
{
Scanner scanner = new Scanner(System.in);
System.out.println("Enter desired pacing: ");
int p = scanner.nextInt();
p = p - 4;
}
}

Now, in Java 9, we can rewrite this code. As you can see next, the redundant code has been moved into a single private method called characterTravel:

    . . . 
public interface characterTravel
{
pubic default void walk()
{
characterTravel("walk");
}
public default void run()
{
characterTravel("run");
}
public default void fastWalk()
{
characterTravel("fastWalk");
}
public default void retreat()
{
characterTravel("retreat");
}
public default void fastRetreat()
{
characterTravel("fastRetreat");
}
private default void characterTravel(String pace)
{
Scanner scanner = new Scanner(System.in);
System.out.println("Enter desired pacing: ");
int p = scanner.nextInt();
if (pace.equals("walk"))
{
p = p +1;
}
else if (pace.equals("run"))
{
p = p + 4;
}
else if (pace.equals("fastWalk"))
{
p = p + 2;
}
else if (pace.equals("retreat"))
{
p = p - 1;
}
else if (pace.equals("fastRetreat"))
{
p = p - 4;
}
else
{
//
}