Another way to think about this is: 1. First, default methods are not inherently bad. They are useful in many situations and can be "overridden" on implementing classes, if necessary. 2. A default method should be provided when the operation is not strictly required or if the implementation (procedure/algorithm) is rather simple (e.g. following the template pattern), for example...
@FunctionalInterace { interface Sorter { default Object[] sort(Object... array) { return convert(Arrays.asList(array)).toArray(); } <T extends Iterable<?>> T convert(T collection); } 3. If the interface footprint is small (as it should be) then it is possible to use in *Lambda* expressions (and *Method References*), as proper @FunctionalInterface as shown above, which is very useful when composing *Streams*, etc. Food for thought. -j On Fri, May 8, 2020 at 10:17 AM Jacob Barrett <jbarr...@pivotal.io> wrote: > As a general rule default implementations on an interface should only used > when absolutely necessary because all the implementations are out of your > control. For example, the collection interfaces in the JDK all gained new > APIs but Java doesn’t implement every instance of them so a default is > necessary for forward progress. However, if you own all instances you > should not need to use default. So in this particular PR the use of default > in the InternalCache in my opinion is wrong. We should control all internal > interfaces and therefor can update them all with the correct > implementation. > > -Jake > > > On May 8, 2020, at 9:49 AM, Kirk Lund <kl...@apache.org> wrote: > > > > I believe some of the Geode community has already decided that we > shouldn't > > overuse default methods in interfaces. Dan and others were the ones who > > decided this and thus I can't really explain to folks in PRs why it's bad > > to overuse default methods. Could some of the folks with strong > > understanding of why we should avoid making every method default empty > > please speak up here and/or in https://github.com/apache/geode/pull/5014 > ? > > > > My understanding is that default implementations should only be provided > in > > interfaces when it's important to do so for facilitating some sort of > > deprecation and replacing a deprecated method. > > > > Thanks, > > Kirk > > -- -John Spring Data Team