Giao diện AbstractInstant của Joda mở rộng loại thô Comparable
, thay vì Comparable<AbstractInstant>
, có vẻ như vi phạm Java best practices. Đặc biệt, nó có nghĩa là tôi không thể sử dụng DateTime để parameterize một lớp học như thế này:Tại sao Joda instants mở rộng loại thô Comparable?
class Foo<T extends Comparable<? super T>> {
public int ct(T a, T b) {
return a.compareTo(b);
}
}
Đó là sự hiểu biết của tôi như thế này của lớp là hoàn toàn hợp lệ (chắc chắn nó làm việc với đôi, vv). Để có được nó để làm việc với DateTime, tuy nhiên, tôi phải xả rác mã của riêng tôi với các loại nguyên liệu và cảnh báo đàn áp:
@SuppressWarnings("unchecked")
class Foo<T extends Comparable> {
public int ct(T a, T b) {
return a.compareTo(b);
}
}
Có một related question cho thấy một workaround (gói các DateTime trong lớp khác vì mục đích so sánh), nhưng tôi không thấy tại sao điều đó lại cần thiết. Câu hỏi của tôi sau đó là:
- Có ai biết tại sao Joda được mở rộng một kiểu thô, hoặc
- Đây có phải là một lỗi tôi nên báo cáo với các nhà bảo trì thư viện?
Chỉ cần một lưu ý cho những người đến câu trả lời này gần một năm sau: Joda 2.0 hỗ trợ Generics, do đó, nó giải quyết vấn đề này. – Snekse