即使在使用接口時,您仍需要考慮一個缺陷。
考慮下面的代碼:
public void sampleMethod(List<String> list) {
list.add("baz");
System.out.println(list);
}
我們正在使用接口定義唯一非標準操作,但如果你檢查documentation,你會發現,add()
操作是可選的。
所以,如果你執行下面的代碼
public void test() {
List<String> sampleList = new ArrayList<>();
sampleList.add("foo");
try {
sampleMethod(sampleList);
}catch (Exception e) {
e.printStackTrace();
}
try {
sampleMethod(Collections.unmodifiableList(sampleList));
}catch (Exception e) {
e.printStackTrace();
}
try {
sampleMethod(Collections.singletonList("bar"));
}catch (Exception e) {
e.printStackTrace();
}
}
您將獲得:
[foo, baz]
java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableCollection.add(Collections.java:1075)
...
java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
...
這是一個例子,爲什麼即使你只使用非標準操作你的程序可能會失敗。
該示例位於您找到它的同一頁面上。 http://docs.oracle.com/javase/tutorial/collections/interfaces/set.html他們已經在這個例子中使用了Set。 – ha9u63ar 2014-10-27 11:34:57