如果你使用java超过一年,你可能会这样定义方法的签名:
List getList(){ List list = new ArrayList(); ... return list; }
也就是说,你会让方法返回抽象的List,而不是具体的ArrayList, 这样你可以获得比较强的封装性。
然而,这种强封装同时意味着损失了一定的信息量。 当客户端拿这个list对象时,它不知道这个list是不是modifiable的,也不知道执行list.get(n)的时间复杂度是O(1) (链表)、还是O(n) (数组)。
所以,当有必要向客户端透露返回值的特性时,直接用具体类型会更好些:
ArrayList getList(){ ArrayList list = new ArrayList(); ... return list; }