Tôi muốn có một giao diện A
được tham số T
A<T>
và cũng muốn mọi lớp triển khai thực hiện Comparable
(với T
và các loại phụ của nó). Nó có vẻ tự nhiên để viết interface A<T> extends Comparable<? extends T>
, nhưng điều đó không hoạt động. Làm thế nào tôi nên làm điều đó sau đó?Giao diện Java mở rộng So sánh
Trả lời
Khi Comparable<? extends T>
xuất hiện nó có nghĩa là bạn có một thể hiện của Comparable
có thể được so sánh với một (không rõ) subtype của T
, không phải là nó có thể được so sánh với bất kỳ subtype của T.
Nhưng bạn don' t cần điều đó, bởi vì Comparable<T>
có thể tự so sánh với bất kỳ loại phụ nào là T
, ví dụ: a Comparable<Number>
có thể so sánh chính nó với một số Comparable<Double>
.
Vì vậy, hãy thử:
interface A<T> extends Comparable<T> {
// ...
}
hoặc
interface A<T extends Comparable<T>> extends Comparable<A<T>> {
// ...
}
tùy thuộc vào việc bạn cần để có thể so sánh trường hợp của T
để thực hiện phương pháp compareTo
của bạn.
Đây là một câu trả lời tuyệt vời! Tôi đến đây từ http://stackoverflow.com/questions/6290406/generic-method-to-sort-a-map-on-values. Giải quyết vấn đề của tôi. –
Nếu bạn sử dụng so sánh bạn không cần phải xác định khả năng cho các kiểu con trong hàm so sánh, nó có thể truyền vào bất kỳ kiểu con nào của đối tượng X thành phương thức khai báo tham số lớp X. Xem mã dưới đây để biết thêm thông tin.
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. Java - Giao diện mở rộng chính nó
- 2. Cách ngăn giao diện mở rộng
- 3. Enum <? mở rộng giao diện>
- 4. Mở rộng giao diện bên trong?
- 5. sử dụng phương thức equals() trong giao diện so sánh?
- 6. Giao diện mở rộng giao diện khác nhưng thực hiện phương pháp của nó
- 7. Mở rộng Java Enums
- 8. Mối quan hệ "giao diện mở rộng giao diện" trông như thế nào trong UML?
- 9. Hàng đợi ưu tiên Java và giao diện có thể so sánh
- 10. Tại sao có thể gọi phương thức trên phương thức giao diện Java? [So sánh]
- 11. Java- Ý nghĩa của <T mở rộng so sánh <T>>?
- 12. Xác định các giao diện mở rộng của một Class
- 13. Mở rộng giao diện cho lớp trừu tượng
- 14. Chrome DevTools phần mở rộng giao diện điều khiển
- 15. PHP không thể mở rộng từ giao diện?
- 16. Java: mở rộng một lớp và triển khai một giao diện có cùng phương thức
- 17. Các giao diện cốt lõi của Java EE 7 (EntityManager, ...) có thể mở rộng AutoClosable không?
- 18. So sánh Java Array
- 19. Java so sánh Mảng
- 20. Java Generics WildCard: <? mở rộng Số> so với <T mở rộng Số>
- 21. Java - Thực hiện giao diện
- 22. Mở rộng bộ đệm giao thức trong Java
- 23. Bạn có biết một bộ so sánh giao diện trang web không?
- 24. thực hiện vs mở rộng trong generics trong Java
- 25. java So sánh hai ngày
- 26. So sánh C# và Java
- 27. Thực hiện so sánh Java
- 28. So sánh HashMaps trong Java
- 29. Java So sánh Hai Lists
- 30. Java - Collection.Sort qua giao diện Objects
Tôi cũng sẽ giới thiệu cho bạn các câu hỏi thường gặp về Java Generics (http://www.angelikalanger.com/GenericsFAQ/FAQSections/ProgrammingIdioms.html#FAQ204), sẽ cung cấp cho bạn thêm ý tưởng về 'So sánh '. –