<div dir="ltr"><div class="gmail_extra">On Sun, Oct 20, 2013 at 9:13 AM, Doug Lea <span dir="ltr">&lt;<a href="mailto:dl@cs.oswego.edu" target="_blank">dl@cs.oswego.edu</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">On 10/19/2013 03:38 PM, Tim Peierls wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I suppose there&#39;s no harm in adding this, but I think most people already get<br>
that a reference to an Optional isn&#39;t a meaningful value.<br>
</blockquote>
<br></div>
The reaction of others seems to argue for adding the wording.<br>
Most people know that comparing Integers via &quot;==&quot; is<br>
almost always wrong. (So wrong that autoboxing normally<br>
rescues you from this if one of the arguments is an int.)<br>
And most people would not even think to do<br>
synchronized(Integer.valueOf(<u></u>aNumber), and would if asked<br>
think that it is such a terrible idea that it is a good<br>
candidate to being outlawed.<br>
But most people haven&#39;t noticed that the same issues apply<br>
even moreso to Optional.</blockquote><div><br></div><div>I think the opposite is true: People are more likely to make mistakes because of autoboxing than they are to write code that synchronizes on Optional instances or compares Optional references.</div>
<div><br></div><div>The virtue of Optional, in my experience with the Guava variety, is that the compiler never lets you forget that you aren&#39;t dealing with a Foo, you&#39;re dealing with a (probably lightweight, possibly magical) potential container of a Foo. It&#39;s no more tempting to say &quot;synchronized (optionalFoo)&quot; than it is to say &quot;synchronized (singletonFoo)&quot;. Maybe even less tempting, because a singleton at least has a (misleading) whiff of permanence, whereas an optional thing might not be there at all.</div>
<div><br></div><div>It&#39;s fine to warn people in general about the potential pitfalls that exist today or that might arise in the future due to new language features. It just seems strange to focus on Optional, a class whose name practically shouts to the user, &quot;Don&#39;t synchronize on me!&quot;</div>
<div><br></div><div>--tim</div></div></div></div>