Skip to content

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.

Callbacks

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;
    }

}

Clone this wiki locally