Doug,<br><br><div class="gmail_quote">On Thu, Mar 28, 2013 at 12:06 PM, Doug Lea <span dir="ltr">&lt;<a href="mailto:dl@cs.oswego.edu" target="_blank">dl@cs.oswego.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">On 03/28/13 14:52, Joshua Bloch wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Doug,<br>
<br>
I don&#39;t get it. You can set and unset flags on your own EnumSet.  Why isn&#39;t that<br>
sufficient?<br>
</blockquote>
<br></div>
There are a lot of problems. First, even<br>
though most spliterators will return the same set of<br>
characteristics each time, you can&#39;t just create one static one:<br>
<br>
class MySpliterator { ...<br>
  static final EnumSet&lt;Characteristics&gt;  cs = EnumSet.of(...);<br>
  EnumSet&lt;Characteristics&gt;  characteristics() return cs; }<br>
}<br>
<br>
... because you cannot risk that no one will modify.<br></blockquote><div><br></div><div>Sounds like a perfect opportunity to put in immutableEnumSet, which is trivial to implement and generally useful. Alternatively, don&#39;t share, and see if the performance it good enough.  (I suspect it will be.)</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Second, when inside streams, you&#39;d have to create a new EnumSet<br>
Object across each stage, that somehow secretly extends the<br>
public Characteristics with non-public internal control flags.<br>
Which means either some slow conversion table or grabbing<br>
private EnumSet internals.<br></blockquote><div><br></div><div>Or having two EnumSets: one public, consisting of public constants, and one private, consisting of private constants. Again, doesn&#39;t sound like a big deal. </div>
<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
So it is both slow and painful.</blockquote><div><br></div><div>You haven&#39;t convinced me of either (yet).  Did you measure the performance?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
 I tried to make it less so,<br>
knowing that people sometimes react hostilely to plain bit<br>
sets. But I&#39;m sure that the current scheme is better than all<br>
I tried. (Ditto for Brian Goetz and Paul Sandoz).<br>
In fact, I think the current scheme is sorta nice in<br>
an absolute sense.</blockquote><div><br></div><div>Could be.  I haven&#39;t seen it. That said, I find that bit fields are usually not a good idea in the post-enum age.</div><div><br></div><div>     Josh</div><div> </div>
</div>