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

More uniform safe-null methods in CollectionUtils

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

Details

    • Bug
    • Status: Open
    • Minor
    • Resolution: Unresolved
    • 4.1
    • None
    • Collection
    • None

    Description

      Currently, there are 65 public methods in `CollectionUtils`. And 53 without the deprecated ones. Out of these, 24 handle `null` arguments. The remaining methods throw a `NullPointerException` (NPE) at some part of its code.

      The methods that handle nulls, throw NPE, or return empty columns, boolean values, or just doesn't do anything.

      As a user of the API, I would expect a more uniform behaviour across the methods of `CollectionUtils`. COLLECTIONS-600 address one of these methods.

      `removeAll` (2x) and `retainAll` (2x) both state that a NPE will be thrown if either parameter is `null`. However, they never check if the values are null, and instead allow the code to run until a NPE is thrown.

      And the following code shows that `isEmpty` and `isFull` behave differently too.

      Collection<String> c = null;
      System.out.println(CollectionUtils.isEmpty(c)); // return true
      System.out.println(CollectionUtils.isFull(c));  // throws a NPE
      

      If I don't have to worry about `null`s with `#isEmpty`, I would expect the same from its related-method `#isFull`.

      What would be a good approach for it? Define a behaviour to all methods? Or leave as is, but add more documentation?

      There are a few methods that can easily be updated to check for `null` values. Others would require a bit more thinking. An example if the method in question for COLLECTIONS-600. It checks equality of collections, and when both collections are `null`, it says that they are equals. Google Guava Iterables#elementsEqual and Iterators#elementsEqual do not check for null values, for what it is worth.

      Attachments

        Issue Links

        Activity

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

          People

            kinow Bruno P. Kinoshita
            kinow Bruno P. Kinoshita

            Dates

              Created:
              Updated:

              Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 20m
                20m

                Slack

                  Issue deployment