インターフェイスには [Java 7 の] 静的メソッドはありません。list1
では のメソッドのみにアクセスできますがCollection
、list
では のすべてのメソッドにアクセスできますArrayList
。
可能な限り具体的でない型で変数を宣言することをお勧めします。したがって、たとえば、または何らかの理由で変更ArrayList
した場合、コードの大部分 (クライアント クラスなど) をリファクタリングする必要はありません。LinkedList
HashSet
次のようなものがあると想像してください(説明のみを目的としており、コンパイルできません):
class CustomerProvider {
public LinkedList<Customer> getAllCustomersInCity(City city) {
// retrieve and return all customers for that city
}
}
そして、後でそれを実装して を返すことにしましたHashSet
。LinkedList
を返すという事実に依存し、持っていないメソッドを呼び出すクライアント クラスがあるかもしれHashSet
ません (例: LinkedList.getFirst()
)。
そのため、次のようにする方がよいでしょう。
class CustomerProvider {
public Collection<Customer> getAllCustomersInCity(City city) {
// retrieve and return all customers for that city
}
}