我有一个函数,有时必须返回一个 Date
,有时返回一个 DateTime
(Joda-Time)。
static public <T extends Object> T convertTimeForServer(DateTime toSave) {
DateTime temp = null;
try {
temp = toSave.withZone(DateTimeZone.forID(getServerTimeZone()));
} catch (Exception e) {
}
T toReturn = null;
if (toReturn.getClass().equals(temp)) {
return (T) temp;//Return DATETIME
} else {
return (T) temp.toDate();//Return DATE
}
}
这是正确的方法吗?
如何使用?
像这样(timerHelper 是类名):
DateTime t = timerHelper.<DateTime>convertTimeForServer(new DateTime());
Date t2 = timerHelper.<Date>convertTimeForServer(new DateTime());
或
DateTime t = (DateTime)timerHelper.convertTimeForServer(new DateTime());
Date t2 = (Date)timerHelper.convertTimeForServer(new DateTime());
以及如何使用此功能?
static public <T extends Object> T current_Moment(){
return convertTimeForServer(new DateTime());
}
最佳答案
我怀疑您在这里尝试使用泛型太聪明了。因为您在返回类型上没有多态性并不意味着您应该求助于泛型来尝试实现该效果。
您可以通过两种方法简单地实现它:public static Date convertToDateForServer(DateTime toSave) {...}
和 public static DateTime convertToDateTimeForServer(DateTime toSave) {...}
。调用代码似乎知道它想要什么,所以它可以简单地调用所需的方法。如果这两种方法确实存在复杂的共性,请创建一个都可以在内部调用的私有(private)方法。
关于Java模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30939425/