From seahen123 at gmail.com Sun Aug 26 22:45:59 2018 From: seahen123 at gmail.com (Chris) Date: Sun, 26 Aug 2018 15:45:59 -0700 Subject: [JEP 302] Method references with parameters Message-ID: I have a suggestion for JEP 302, while lambdas are being worked on: method references with parameters as a shorthand. For example, Integer::valueOf(2000) would be synonymous with () -> Integer.valueOf(2000) and byte[]::new(ARRAY_SIZE) with () -> new byte[ARRAY_SIZE]. I'm guessing there's probably some reason this isn't already in the proposal, but can someone please explain it? Sincerely, Chris Hennick From brian.goetz at oracle.com Mon Aug 27 14:23:01 2018 From: brian.goetz at oracle.com (Brian Goetz) Date: Mon, 27 Aug 2018 10:23:01 -0400 Subject: [JEP 302] Method references with parameters In-Reply-To: References: Message-ID: This has been requested a few times. Think about where the motivation for this is coming from.? It goes something like this: ?- I prefer to use method references over lambdas when I can, they're prettier and (usually) more compact; ?- Here's a case where I could _almost_ use a method reference, but can't quite -- can't I stretch the syntax to get there? If you think about where this goes, you'll see that it's a swan-dive down a slippery slope.? It starts with "can't I just curry one parameter on", but it won't stop there.? Pretty soon you're reinventing lambdas with a different syntax. So, let's go back to why we added method references to the language in the first place.? Clearly they are not strictly needed -- any method reference can be expressed as an equivalent lambda. In this sense, method references are _weaker_ than lambdas; so why would we add a feature that is strictly weaker than another? The goal of method references is not concision, or the ability to express something lambdas can't; it is the ability to express it _more transparently_.? Names matter; a lambda is an imperative bag of code, but a method reference makes a higher-level statement, saying "just reuse that thing over there, that already has a name."? A currying shorthand for method references is a cute trick, but the resulting construct has neither the flexibility of lambdas, nor the "I'm just a reference to an existing declaration" of method references.? Nor is it likely to be all that much more concise, either. So, I think this feature suggestion offers little return-on-complexity, while at the same time, muddying the clarity of what method references are. On 8/26/2018 6:45 PM, Chris wrote: > I have a suggestion for JEP 302, while lambdas are being worked on: method > references with parameters as a shorthand. For example, > Integer::valueOf(2000) would be synonymous with () -> Integer.valueOf(2000) > and byte[]::new(ARRAY_SIZE) with () -> new byte[ARRAY_SIZE]. > > I'm guessing there's probably some reason this isn't already in the > proposal, but can someone please explain it? > > Sincerely, > Chris Hennick