I for one actually prefer to put a different type on the variable than the implementation. I.e. in the given case, I would actually use:
`List<String> a = new ArrayList<String>();`
I know that for some things it is convenient, but I appreciate the reminder to treat interface and implementation as distinct concepts.