我想有由T
A<T>
參數化的接口A
,也希望每一個實現它,也能實現Comparable
(與T
及其亞型)類。編寫interface A<T> extends Comparable<? extends T>
似乎很自然,但這不起作用。我應該怎麼做呢?Java接口擴展可比
15
A
回答
16
當Comparable<? extends T>
出現就意味着你的Comparable
實例,它可以比較的T
一個(未知)亞型,而不是它可以比任何亞型 T.
,但你不因爲Comparable<T>
無論如何都可以將其自身與T
的任何子類型進行比較,例如Comparable<Number>
可以將其自身與Comparable<Double>
比較。
所以嘗試:
interface A<T> extends Comparable<T> {
// ...
}
或
interface A<T extends Comparable<T>> extends Comparable<A<T>> {
// ...
}
取決於你是否需要能夠爲了實現你的compareTo
方法比較T
實例。
+0
這是一個很棒的答案!我來自http://stackoverflow.com/questions/6290406/generic-method-to-sort-a-map-on-values。解決了我的問題。 – 2011-06-09 09:41:34
2
如果使用可比較的方法,您不需要在比較函數中指定子類型的可能性,本質上可以將對象X的任何子類型傳遞給聲明類X的參數的方法。以下代碼可獲取更多信息。
public interface Test<T> extends Comparable<T> {
}
class TestImpl implements Test<Number> {
@Override
public int compareTo(final Number other) {
return other.intValue() - 128;
}
}
class TestMain {
public static void main(final String[] args) {
TestImpl testImpl = new TestImpl();
testImpl.compareTo(Integer.MIN_VALUE);
}
}
相關問題
- 1. 接口擴展可比
- 2. 用java泛型和接口擴展可比較件
- 3. Java接口擴展問題
- 4. Java接口擴展Cloneable的
- 5. 擴展接口
- 6. 擴展接口
- 7. Java集合比較擴展,擴展接口相當的通用類
- 8. 實現一個可擴展可比的接口
- 9. 創建可擴展枚舉用於可擴展接口
- 10. 接口擴展TimerTask
- 11. 如何擴展JNA接口映射? (JAVA)
- 12. Scala擴展了Java接口,類型爲
- 13. Java通用接口擴展Comparable
- 14. Java FX - 不可擴展窗口
- 15. 如何擴展擴展類的接口
- 16. 不同型號的可擴展接口
- 17. 是否可以擴展EventTarget接口?
- 18. java從基本接口獲得所有擴展接口
- 19. InterruptibleChannel接口的目的是擴展Java中的Channel接口嗎?
- 20. Java EE 7的核心接口(EntityManager,...)可以擴展AutoClosable嗎?
- 21. 可以實現3個接口和擴展,以及,JAVA
- 22. AS3/Flex:接口擴展接口
- 23. 接口擴展接口屬性
- 24. 擴展Iterable的Haxe接口
- 25. C#類型擴展接口
- 26. 擴展方法到接口
- 27. 擴展和實現接口
- 28. GWT擴展常量接口
- 29. 擴展接口模式
- 30. 組合或擴展接口?
我也想請您看看Java泛型常見問題解答(http://www.angelikalanger.com/GenericsFAQ/FAQSections/ProgrammingIdioms.html#FAQ204),它會給你關於'Comparable'更多的想法。 – 2010-02-09 19:47:31