GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • java.evolved
  • โ†
  • โ†’

This view

  • Original page
  • New address

GeezerVison is showing javaevolved.dev โ€” Private interface methods | java.evolved

Home / Language / Private interface methods
Language Intermediate

Private interface methods

  • ๐Ÿ› Report a code issue
  • ๐ŸŒ Report a translation issue
  • ๐Ÿ’ก Suggest a new pattern

Extract shared logic in interfaces using private methods.

Interfaces
Code Comparison
โœ• Java 8
interface Logger {
    default void logInfo(String msg) {
        System.out.println(
            "[INFO] " + timestamp() + msg);
    }
    default void logWarn(String msg) {
        System.out.println(
            "[WARN] " + timestamp() + msg);
    }
}
โœ“ Java 9+
interface Logger {
    private String format(String lvl, String msg) {
        return "[" + lvl + "] " + timestamp() + msg;
    }
    default void logInfo(String msg) {
        IO.println(format("INFO", msg));
    }
    default void logWarn(String msg) {
        IO.println(format("WARN", msg));
    }
}
Share ๐•
See a problem with this code? Let us know.
Why the modern way wins
๐Ÿงฉ

Code reuse

Share logic between default methods without duplication.

๐Ÿ”

Encapsulation

Implementation details stay hidden from implementing classes.

๐Ÿงน

DRY interfaces

No more copy-paste between default methods.

Old Approach
Duplicated Logic
Modern Approach
Private Methods
Since JDK
9
Difficulty
Intermediate
JDK Support
Private interface methods
Available

Widely available since JDK 9 (Sept 2017)

How it works

Java 9 allows private methods in interfaces, enabling you to share code between default methods without exposing implementation details to implementing classes.

Related Documentation
Private Interface Methods โ†—
Proof
View proof source โ†—
Related patterns
Language Beginner

Compact source files

Java 8
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println(
            "Hello, World!");
    }
}
Java 25
void main() {
    IO.println("Hello, World!");
}
Hover to see modern โžœ
JDK 25+ โ†’
Language Intermediate

Flexible constructor bodies

Java 8
class Square extends Shape {
    Square(double side) {
        super(side, side);
        // can't validate BEFORE super!
        if (side <= 0)
            throw new IAE("bad");
    }
}
Java 25+
class Square extends Shape {
    Square(double side) {
        if (side <= 0)
            throw new IAE("bad");
        super(side, side);
    }
}
Hover to see modern โžœ
JDK 25+ โ†’
Language Beginner

Type inference with var

Java 8
Map<String, List<Integer>> map =
    new HashMap<String, List<Integer>>();
for (Map.Entry<String, List<Integer>> e
    : map.entrySet()) {
    // verbose type noise
}
Java 10+
var map = new HashMap<String, List<Integer>>();
for (var entry : map.entrySet()) {
    // clean and readable
}
Hover to see modern โžœ
JDK 10+ โ†’
You are visitor 01402503 โ€” GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800ร—600. No cookies required.