GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing javaevolved.dev โ Private interface methods | java.evolved
Language
Intermediate
Private interface methodsExtract shared logic in interfaces using private methods. 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));
}
}
See a problem with this code? Let us know.
Why the modern way wins
๐งฉ
Code reuseShare logic between default methods without duplication. ๐
EncapsulationImplementation details stay hidden from implementing classes. ๐งน
DRY interfacesNo 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
Proof
Related patterns
Language
Beginner
Compact source filesJava 8
public class HelloWorld {
public static void main(String[] args) {
System.out.println(
"Hello, World!");
}
}
Java 25
void main() {
IO.println("Hello, World!");
}
JDK 25+
โ
Language
Intermediate
Flexible constructor bodiesJava 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);
}
}
JDK 25+
โ
Language
Beginner
Type inference with varJava 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
}
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. |