Tôi có một câu hỏi thiết kế. Dưới đây là dấu thời gian InterfaceThiết kế tốt trong Generics
/**
* <T> Type of Timestamp. For ex: Date, long, Calendar etc
*
*/
public interface TimeStamp<T> extends Comparable<TimeStamp<T>>
{
/**
* Returns the timestamp.
* @return
*/
public T getTimeStamp();
}
tôi về cơ bản muốn có một lớp List
rằng chỉ có thể chứa timestamps. Việc thêm bất kỳ thứ gì vào danh sách về cơ bản sẽ phụ thuộc vào dấu thời gian. Làm thế nào để khai báo lớp List của tôi.
Nếu tôi quyết định cho các thành phần, mã sẽ trông giống như:
public class TimeList<T> implements List<TimeStamp<T>>
{
private List<TimeStamp<?>> list = new ArrayList<TimeStamp<?>>();
//other list methods who will return based on list above
.....
}
Nhưng ở trên không có ý nghĩa. Ví dụ nếu tôi có một lớp DefaultTimeStamp implments TimeStamp<Long>
và nhanh chóng TimeList như
TimeList<DefaultTimeStamp> l = new TimeList<DefaultTimeStamp>();
Sau đó Anycall để l.add(elem)
sẽ mong đợi một TimeStamp<DefaultTimeStamp>
đó là sai.
Một tuyên bố: public class TimeList<TimeStamp<T>> implements List<TimeStamp<T>>
sẽ cung cấp thời gian biên dịch lỗi
gì nên việc kê khai của TimeList<Type>
của tôi? Cuối cùng nó chỉ là một danh sách chỉ chứa timestamps
Bởi vì thêm bất cứ điều gì vào danh sách sẽ phụ thuộc vào dấu thời gian của mình . – Jatin
bạn có muốn TimeList chứa TimeStamp cho T cụ thể cho bất kỳ T nào không? –
Có. Điều đó là cần thiết để tính toán – Jatin