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.