I have created an ArrayList like the following:
def list = new ArrayList()
But the codenarc report it is warning like following.
Why don't you just use a suggestion from codenarc?
def list = [] as ArrayList
Typical is:
def list = []
other options include
def list = new ArrayList()
def list = new ArrayList<Foo>()
List list = new ArrayList()
def list = [] as ArrayList
List list = [] as ArrayList
and of course:
List<Foo> list = new ArrayList<Foo>();
Similar options exist for HashMap using [:].
You can do:
def list = [] // Default is ArrayList
def list = [] as ArrayList
ArrayList list = []
And again, for HashMap:
HashMap map = [:]
def map = [:] as HashMap
The default in this case is a LinkedHashMap:
def map = [:]
But the codenarc report it is warning like following.
ArrayList objects are better instantiated using the form "[] as ArrayList"
IMO, this is bad advice on Codenarc's part as it assumes that the implementation type of [] is ArrayList. This is true today, but may not always be.
The simplest/best/usual way to create a List implementation is:
def list = []
If possible, I will usually write something like
List<String> list = []
Just to make it a bit more obvious what this list should contain, i.e. for the sake of code readability. If I wanted to create a specific type of list I would instantiate a List "the Java way"
List<String> list = new SomeCustomListImplementation<String>()
But in practice I can't remember ever doing this.