Uploaded image for project: 'Commons Collections'
  1. Commons Collections
  2. COLLECTIONS-424

Surprising exception by CompositeSet in a situation where CompositeCollection works fine

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 3.2.1
    • 4.0-alpha1, 4.0
    • Set
    • None
    • All environments

    Description

      We have a method that uses a CompositeCollection. Here's a simplified version of it:

      void m(CompositeCollection coll)

      { coll.addComposited(new TreeBag()); }

      It works fine when the argument is a CompositeCollection, but it throws an exception when the argument is a CompositeSet. E.g.:

      m(new CompositeCollection()); // OK
      m(new CompositeSet()); // IllegalArgumentException

      Although the exception is documented in CompositeSet, this behavior is very surprising. Is there a way to have m() accept CompositeCollections without running into this exception? The only solution that comes to my mind is to dynamically check the type of 'coll' in m(), but this is a rather nasty work-around.

      A better solution may be to make the genericity of CompositeCollection explicit by adding a type parameter:

      class CompositeCollection<T extends Collection> {
      void addComposited(T c)

      { /* .. */ }
      }

      class CompositeSet extends CompositeCollection<Set> {
      @Override void addComposited(Set c) { /* .. */ }

      }

      This way, users of CompositeCollection must choose the kind of collections that can be composed and will not encounter surprises, such as the above.

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            michaelpradel Michael Pradel
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment