>From my experience,  devs in general only read the doc when an exception is 
>thrown so i agree with you.

And in the wake of deprecating Optional.get(), I propose to rename 
RuntimeException to RTFMException :)

Remi


Le 26 avril 2016 20:05:22 CEST, Peter Levart <peter.lev...@gmail.com> a écrit :
>Hi,
>
>If Optional.get() is the method that gets most attention from beginners
>
>and learners, then perhaps its javadoc is the place that could be 
>improved by making it a honey pot for advice about Optional use. The 
>assumption that the average programmer starts reading documentation of 
>some new API from the class-level javadocs is perhaps wrong. Quick help
>
>(Ctrl-Q in IDEs like IDEA, etc.) is context-sensitive and brings up the
>
>method-level javadoc. That's where the story should begin, I think...
>
>Regards, Peter
>
>On 04/26/2016 01:10 PM, Tagir F. Valeev wrote:
>> Hello!
>>
>> While I'm not a reviewer, I agree with Stephen. While I understand
>the
>> rationale,  such  renaming  would  cause even more confusion and
>pain.
>> Also I think this is not the worst part of Java API, so if we start
>to
>> rename things, where should we stop then?
>>
>> With best regards,
>> Tagir Valeev.
>>
>> SC> In OpenGamma Strata we have 546 uses of Optional.get(). Renaming
>this
>> SC> would be painful and add no value.
>>
>> SC> While I understand the pain from some developers not
>understanding the
>> SC> feature, this is hardly unique in the world of Java. Developers
>learn
>> SC> the right way of doing something soon enough.
>>
>> SC> And while
>>
>> SC> if (opt.isPresent()) {
>> SC>   opt.get()
>> SC> }
>>
>> SC> is sometimes not ideal, in other cases it is the only practical
>choice
>> SC> (eg. where the method needs to have a return statement inside the
>if
>> SC> statement).
>>
>> SC> Changing this to
>>
>> SC> if (opt.isPresent()) {
>> SC>   opt.getWhenPresent()
>> SC> }
>>
>> SC> is just noise - I can see the "present" part twice.
>>
>> SC> I just don't think I can support the rename (although many of the
>> SC> webrev tidy-ups are probably good).
>>
>> SC> Stephen
>>
>>
>>
>> SC> On 26 April 2016 at 00:05, Stuart Marks <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

Reply via email to