Reports declarations of Collection variables made by using the collection class as a type, rather than an appropriate interface. The warning is not issued if weakening the variable type will cause a compilation error.

Example:


  // Warning: concrete collection class ArrayList used.
  int getTotalLength(ArrayList<String> list) {
    return list.stream().mapToInt(String::length).sum();
  }

  // No warning, as trimToSize() method is not
  // available in the List interface
  void addData(ArrayList<String> data) {
    data.add("Hello");
    data.add("World");
    data.trimToSize();
  }
A quick-fix is suggested to use the appropriate collection interface (e.g. Collection, Set, or List).