[concurrency-interest] Navigable{Map, Set} must not inherit from Sorted{Map, Set}

Rémi Forax forax at univ-mlv.fr
Fri Sep 2 14:11:25 EDT 2005

Doug Lea a écrit :
 > Rémi Forax wrote:
 >>    void doSomething(Set<String> set) {
 >>      if (set instanceof SortedSet)
 >>        // before retrofitting:
 >>        //   it's a tree set, or a wrapper on a tree set
 >>        //   like unmodifiableSet(...)
 >>        // after retrofitting:
 >>        //   oups FastTraversalSet match
 >>      else
 >>        // it's my implementation
 >>    }
 >>    The fact that NavigableSet inherits from SortedSet
 >>    prevents me to retrofit FastTraversalSet.
 >>    Please, Navigable{Set,Map} must not inherits
 >>    from Sorted{Set,Map}.
 > According to this, it seems that you do not want any interface to
 > ever inherit from Sorted{Set,Map}.

No, anyone can write an interface that inherit from Sorted{Set,Map}
because i'm free to not use its library.
That not the case of the JDK.
If i want the next Java, i get the new JDK API bundle with it.

 > So even if we changed Navigable
 > to not inherit Sorted, someone else will someday cause you the
 > same problem.

I can choose to not use the library that do this.
I can't do the same with the JDK.

 > Whenever you use instanceof in this way, you are
 > committing yourself to change your code in the future. (You never know
 > exactly when or why though -- if you did, you probably wouldn't have
 > used instanceof.)

Yes your right its a "bad design", but i think i have no
way in Java to avoid such code.
Take by example java.util.Collections and count how many instanceof
you can find. I'm not the only one to use such design :)

 > Sorry to make your life more complicated, but we won't be changing this.

i think it could make not only my life more complicated.

 > -Doug


More information about the Concurrency-interest mailing list