I'm really grasping at straws here and asking for something quantitative to
substantiate this deprecation plan.  As it stands, there is hearsay and
some stackoverflow links - surely going through with this (and inflicting
some level of pain on folks who don't care for this) deserves something a
bit better? Brian mentioned that one criticism often heard is mistakes
aren't corrected - I fully believe that's true.  But this may end up being
one of those "they want to correct mistakes and THIS is what they chose??!"
things.  I understand the appeal in "correcting" this given it's a
relatively new addition, but I don't think it'll go over well.

On Tuesday, April 26, 2016, Paul Benedict <pbened...@apache.org> wrote:

> Are you asking Brian to set up another survey monkey for the masses? I
> expect a happy silent majority and a raucous minority.... just based on
> past results. :-)
> On Apr 26, 2016 6:38 PM, "Vitaly Davidovich" <vita...@gmail.com
> <javascript:_e(%7B%7D,'cvml','vita...@gmail.com');>> wrote:
>
> I've yet to hear one supporter on this thread besides yourself and Stuart.
> Is there some usability survey or something that actually indicates a
> significant sample of people don't like the name? Guava Optional behaves
> and is named the same way, and I've not heard anyone complain about that (I
> and many people I know used it for years).
>
> I think the conversation would be *maybe* different if picking a name for a
> new thing, but the deprecation churn here adds no value, IMO, and is going
> to be viewed as an annoyance by a large swath of people.
>
> On Tuesday, April 26, 2016, Brian Goetz <brian.go...@oracle.com
> <javascript:_e(%7B%7D,'cvml','brian.go...@oracle.com');>> wrote:
>
> > As the person who chose the original (terrible) name, let me weigh in...
> >
> > I think calling this method "get()" was our biggest API mistake in Java
> > 8.  Now, one could argue that, if this is the biggest mistake we made,
> then
> > we did pretty darn good.  Which may be true, but ... make no mistake, it
> > was the wrong name (mea culpa), and experience has borne out that it is
> > widely misused.  Subjectively, about half the uses of .get() I see are
> > wrong -- and wrong in the obvious, avoidable way -- they don't consider
> the
> > optional might be empty. So they've just traded an unexpected NPE for an
> > unexpected NSEE.
> >
> > Its problem is, essentially: it looks harmless, but isn't, but it sure
> > seems like the method you obviously want when you're browsing the
> > autocomplete list / javadoc.  It's a hazard both to code writers (pick
> the
> > wrong method because the name is bad) and to code readers (deceptively
> > harmless looking.)
> >
> > Methods like orElse or ifPresent look harmless, and are; methods like
> > orElseThrow have potentially harmful side-effects but have names that are
> > transparent about what harm they could do.  But Optional.get() is neither
> > safe nor transparent -- and yet awfully tempting-looking -- and this
> leads
> > to frequent misuse.  Naming matters, and this one was wrong, and the harm
> > is observable.  I wish I'd caught it before 8 shipped.
> >
> > Stepping back a bit ... one of the most frequent complaints we get is
> > "mistakes never get fixed".  So, we've decided to be more serious about
> > deprecation -- Dr. Deprecator is suiting up!  But that means, for any
> given
> > item, some people are going to disagree about whether deprecation is
> > suitable, and some will be inconvenienced by the deprecation -- this is
> > unavoidable.
> >
> > Why prioritize this one?  In part, because it's a *new* mistake, and has
> > had less time to become entrenched -- and this is the very first
> > opportunity we have to fix it.  If we can't fix an API mistake at the
> very
> > first opportunity, the logical consequence is we can't ever fix anything.
> > And that doesn't seem to be the world we want to retreat to.
> >
> > Similarly, is this the worst mistake in all of Java?  Surely not. But its
> > also not reasonable to say "you can't fix X until you've fixed everything
> > worse than X" -- again, that's a recipe for never fixing anything.  So,
> in
> > the context of a deprecation effort, this seems an entirely reasonable
> > candidate.
> >
> > I'd like to see it fixed, and the sooner the better.
> >
> >
> > On 4/26/2016 6:43 AM, Stephen Colebourne wrote:
> >
> >> In OpenGamma Strata we have 546 uses of Optional.get(). Renaming this
> >> would be painful and add no value.
> >>
> >> While I understand the pain from some developers not understanding the
> >> feature, this is hardly unique in the world of Java. Developers learn
> >> the right way of doing something soon enough.
> >>
> >> And while
> >>
> >> if (opt.isPresent()) {
> >>    opt.get()
> >> }
> >>
> >> is sometimes not ideal, in other cases it is the only practical choice
> >> (eg. where the method needs to have a return statement inside the if
> >> statement).
> >>
> >> Changing this to
> >>
> >> if (opt.isPresent()) {
> >>    opt.getWhenPresent()
> >> }
> >>
> >> is just noise - I can see the "present" part twice.
> >>
> >> I just don't think I can support the rename (although many of the
> >> webrev tidy-ups are probably good).
> >>
> >> Stephen
> >>
> >>
> >>
> >> On 26 April 2016 at 00:05, Stuart Marks <stuart.ma...@oracle.com
> <javascript:_e(%7B%7D,'cvml','stuart.ma...@oracle.com');>> wrote:
> >>
> >>> Hi all,
> >>>
> >>> Please review these webrevs that deprecate Optional.get() and to
> replace
> >>> it
> >>> with Optional.getWhenPresent(). The corresponding changes are also
> >>> applied
> >>> to OptionalDouble.getAsDouble(), OptionalInt.getAsInt(), and
> >>> OptionalLong.getAsLong().
> >>>
> >>> Unlike most deprecations, this isn't about the function or the utility
> of
> >>> some API, it's about the name. The solution is basically to rename the
> >>> API.
> >>> The problem is that "get" shows up as the "obvious" choice in things
> like
> >>> IDE code completion, leading to code that mishandles empty Optionals.
> >>> Typical Stack Overflow discourse runs something like this:
> >>>
> >>>      Q: what do I do with this Optional thing
> >>>
> >>>      A: just call get()
> >>>
> >>>      Q: thanks, it works!
> >>>
> >>> Of course, it works until it doesn't.
> >>>
> >>> Examining the JDK's use of Optional.get(), I didn't see very many cases
> >>> that
> >>> called get() without first checking for the presence of a value. But I
> >>> did
> >>> see quite a number of cases like this:
> >>>
> >>>      if (opt.isPresent()) {
> >>>          doSomething(opt.get());
> >>>      } else {
> >>>          doSomethingElse();
> >>>      }
> >>>
> >>> In many of these cases, the code could be refactored to use other
> >>> Optional
> >>> methods such as filter(), map(), or ifPresent().
> >>>
> >>> In any case this reinforces the contention that use of get() leads to
> >>> poor
> >>> code.
> >>>
> >>> For this changeset, in just about all cases I've simply replaced the
> >>> call to
> >>> get() with a call to getWhenPresent(). In a couple cases I replaced the
> >>> stream calls
> >>>
> >>>      .filter(Optional::isPresent).map(Optional::get)
> >>>
> >>> with
> >>>
> >>>      .flatMap(Optional::stream)
> >>>
> >>> which I hope will become the new idiom for unwrapping a stream of
> >>> Optionals.
> >>>
> >>> While many cases could be cleaned up further, I didn't change them. The
> >>> reasons are that I didn't want to spend too much time putting code
> >>> cleanup
> >>> into the critical path of this changeset (I'd be happy to help later);
> >>> doing
> >>> so would create potential conflicts with code coming in from the Jigsaw
> >>> forest; and there are non-obvious places where converting from a
> >>> conditional
> >>> to one of the lambda-based methods could cause performance problems at
> >>> startup.
> >>>
> >>> There are also a few cases where simplification is prevented because it
> >>> would end up causing the resulting lambda expressions to throw checked
> >>> exceptions. :-(
> >>>
> >>> Webrevs here:
> >>>
> >>>
> >>> http://cr.openjdk.java.net/~smarks/reviews/8140281/webrev.0.langtools/
> >>>
> >>>    http://cr.openjdk.java.net/~smarks/reviews/8140281/webrev.0.jdk/
> >>>
> >>> Thanks,
> >>>
> >>> s'marks
> >>>
> >>
> >
>
> --
> Sent from my phone
>
>

-- 
Sent from my phone

Reply via email to