作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个设计问题。下面是时间戳接口(interface)
/**
* <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();
}
我基本上想要一个List
只能包含时间戳的类。在列表中添加任何内容基本上取决于时间戳。我的 List 类声明应该如何。
如果我决定组合,代码将如下所示:
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
.....
}
但是上面说的没有意义。例如,如果我有一个类 DefaultTimeStamp implments TimeStamp<Long>
并将 TimeList 实例化为
TimeList<DefaultTimeStamp> l = new TimeList<DefaultTimeStamp>();
然后调用l.add(elem)
将期待一个 TimeStamp<DefaultTimeStamp>
这是错误的。
声明:public class TimeList<TimeStamp<T>> implements List<TimeStamp<T>>
会给出编译时错误
我的 TimeList<Type>
的声明应该是什么? ?最终它只是一个只包含时间戳的列表
最佳答案
我不明白你为什么要这么做
TimeList<DefaultTimeStamp> l = new TimeList<DefaultTimeStamp>();
如果您希望能够添加任何类型的 TimeStamp<Long>
.上述方式会强制用户使用 DefaultTimeStamp
如果您有某些特定于实现的原因需要这样做……但显然通常不会。
TimeList<TimeStamp<Long>> l = new TimeList<TimeStamp<Long>>();
DefaultTimeStamp dts = new DefaultTimeStamp(System.currentTimeMillis());
l.add(dts);
应该工作得很好!
关于java - 好的泛型设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13264218/
我是一名优秀的程序员,十分优秀!