On May 2, 2015, at 11:31 PM, Remi Forax <fo...@univ-mlv.fr> wrote: > Hi all, > today, I stubble on a variant of JDK-8050818 [1], > trying to call negate() on a lambda which is not yet a Predicate (due to > target typing) which requires either to cast the lambda to a Predicate and > everybody knows that cast are evil or to add a local variable. > > I think there is a way to fix that, it's not very orthodox so I let you judge. > The idea is to introduce a static method 'of' on Predicate, > class Predicate<T> { > ... > public static <T> Predicate<T> of(Predicate<T> predicate) { > return predicate; > } > } > > so one can write: > stream.filter(Predicate.of(String::isEmpty).negate()) > compared to > stream.filter(((Predicate<String>)String::isEmpty).negate()) > > so the question is, does it it worth the cost to introduce a static method > that basically do nothing on all functional interfaces of java.util.function. >
That does have the virtue of not adding a static method per operation but i still cannot bring myself to add such methods as a work around for seems like a compiler inference problem (albeit one in which might be very tricky or not possible to solve). In some respects i wonder if the default methods on the functional interfaces are an attractive nuisance. Paul.