API Spliterator#characteristics

Beim lesen der Doku vom [japi]Spliterator[/japi] ist mir die Methode Spliterator#characteristics() ins Auge gesprungen. Ist das deren Ernst? Ich hätte eigentlich erwartet, dass dort statt einer Bitmaske ein [japi]EnumSet[/japi] verwendet wird.
Kennt einer die Rechtfertigung für diese Designentscheidung?

Die Werte haben eine Bedeutung:


// Characteristic values are aligned with corresponding flag values
// in java.util.stream.StreamOpFlag. This enables efficient
// bit set conversion of Spliterator characteristics to and
// from stream flags.
// Each stream flag value occupies 2 bits to indicate whether
// a flag is set, cleared or preserved by operations in a
// pipeline. This is the reason why the characteristic values
// are spaced with a padding bit and essentially occupy 2 bits
// even through only the lower bit is utilized.
// NOTE: if modifications, additions or deletions are
// made to characteristic values it is important to ensure
// such modifications are reflected in the corresponding mapping
// of stream flags values.

(von http://hg.openjdk.java.net/lambda/lambda/jdk/rev/54630475f7bd?revcount=240#l16.385 ). Inwieweit das eine „echte Rechtfertigung“ ist, darüber könnte man streiten. In der letzten Version ist dieser Kommentar übrigens nicht mehr drin… Hab’ jetzt zwar nicht geschaut, bei welcher Revision der rausgeflogen ist, aber vielleicht hat sich irgendein Purist gedacht: „Iiieeehh, inline-Kommentare, über die beschwert sich mein Checkstyle“, und schon war das überflüssige NOTE ... important...-Zeux weg :smiley:

Ja, ich sehe das nicht als Rechtfertigung. Ich dachte eigentlich, dass ich seit Java 5 keine Bitmasken mehr ansehen muss. Offensichtlich weit gefehlt :wink:
Aber es bringt ja auch nichts darüber zu philosophieren was „besser gewesen wäre“. Der Zug ist abgefahren…