[英]Not implementing all the methods of an interface
我嘗試在eclipse上復制下面的代碼。 我收到一個錯誤,告訴我必須實現所有繼承的方法(因為Comparator是一個接口)。
new Comparator(){}
必須實現繼承的抽象方法Comparator.reversed()
。
有許多這些方法,我想要覆蓋的唯一方法是比較。 我是否必須實現所有其他方法,或者有沒有辦法指定我不需要實現它們? 我知道由於接口的契約性質,我將不得不這樣做,但如果我只需要更改一個方法怎么辦?
static Map sortByValue(Map map) {
List list = new LinkedList(map.entrySet());
Collections.sort(list, new Comparator() {
public int compare(Object o1, Object o2) {
return ((Comparable) ((Map.Entry) (o1)).getValue())
.compareTo(((Map.Entry) (o2)).getValue());
}
});
Map result = new LinkedHashMap();
for (Iterator it = list.iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry)it.next();
result.put(entry.getKey(), entry.getValue());
}
return result;
}
編輯通過在eclipse luna中將合規性級別更改為java8來解決。 謝謝!
類型
new Comparator(){}
必須實現繼承的抽象方法Comparator.reversed()
然后如果我應用修復,我添加了很多函數
Comparator.reversed
是在Java 1.8中引入的,它是一個默認方法,即您不必覆蓋的方法。
看起來您已將您的合規性級別設置為Java 1.8之前(因為Eclipse要求您覆蓋reversed
),同時使用Java 1.8 API(因為Comparator
具有reversed
方法)。
確保將API更改為1.7或將合規性級別更改為1.8 。 (后一種選擇需要Eclipse Luna或更好。)
有關Eclipse合規性級別的更多信息:Eclipse 中的“編譯器合規級別”是什么?
接口的目的是強制所述接口的實現者擁有其中列出的所有方法。 現在有幾種方法可以實現不實現所有方法。
為了保持核心集合接口的數量可管理,Java平台不為每個集合類型的每個變體提供單獨的接口。 (這些變體可能包括不可變,固定大小和僅附加。)相反,每個接口中的修改操作都被指定為可選 - 給定的實現可以選擇不支持所有操作。 如果調用了不受支持的操作,則集合將拋出UnsupportedOperationException。 實現負責記錄它們支持哪些可選操作。 所有Java平台的通用實現都支持所有可選操作。
抽象類可能更適合您正在做的事情。 雖然你可以只是.super()
一切。
你遇到了一個Eclipse bug: https : //bugs.eclipse.org/bugs/show_bug.cgi?id = 390889
基本上,JAVA 1.8引入了一種全新的方法Comparator.reversed()。 由於你有一個JAVA 1.7或更早的代碼,JAVA 1.8找不到該方法並且無法編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.