DEV Community

Discussion on: Java: Why Have Abstract Classes?

Collapse
 
siy profile image
Sergiy Yevtushenko

Since Java 8 many traditional use cases for abstract classes can be handled by interfaces with default methods. Often it's possible to express class functionality via single method. In such cases particular implementation of the interface can be even represented as lambda:

public interface Mapper<T1> {
    Promise<Tuple1<T1>> id();

    default <R> Promise<R> map(final FN1<R, T1> mapper) {
        return id().map(tuple -> tuple.map(mapper));
    }

    default <R> Promise<R> flatMap(final FN1<Promise<R>, T1> mapper) {
        return id().flatMap(tuple -> tuple.map(mapper));
    }
}
Enter fullscreen mode Exit fullscreen mode

Now when one need to create implementation, it will look so:

    static <T1> Mapper1<T1> doWithAll(final Promise<T1> promise1) {
        return () -> all(promise1);
    }
Enter fullscreen mode Exit fullscreen mode