Java default methods were introduced to enable interface evolution, but this approach hits a fundamental wall when trying to replace entire interfaces rather than individual methods. A three-step Release-Transition-Release pattern works well for evolving individual interface methods, but breaks down for whole-interface replacement due to Java's invariant generics. When published API methods need to transition return types from Container<Old> to Container<New>, existing client assignments break at compile time. Possible workarounds include using wildcards (PECS), providing specialized published interfaces, or adapter containers, but none offer a clean general solution. The conclusion is that for whole-interface replacement, the complexity isn't worth it — a flag day or simple search-replace is more practical.
Sort: