-
Notifications
You must be signed in to change notification settings - Fork 314
Coding Styles and Conventions
Igor Dayen edited this page Apr 10, 2026
·
5 revisions
Please refer to: https://kotlinlang.org/docs/idioms.html
There are also special areas worth mentioning as influencing development factors.
Before Java 8, interfaces could only declare methods:
boolean preHandle(...); // no body
That forced every implementation to define all methods.
So frameworks had to create adapter classes, like:
abstract class HandlerInterceptorAdapter implements HandlerInterceptor {
public boolean preHandle(...) { return true; }
public void postHandle(...) {}
public void afterCompletion(...) {}
}
With default, adapter classes became unnecessary. Note, in kotlin, default-keyword is not required.
Now you can do:
public interface HandlerInterceptor {
default boolean preHandle(...) { return true; }
default void postHandle(...) {}
default void afterCompletion(...) {}
}
See Spring Example below:
package org.springframework.web.servlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.lang.Nullable;
public interface HandlerInterceptor {
default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return true;
}
default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
}
default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
}
}
And users can implement only what they care about:
class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(...) {
// only override this
return true;
}
}
(c) Embabel Software Inc 2024-2025.