在下面的代码中,我希望第二种方法也是通用的,但是因为我在方法中创建了Calendar对象,因为类型擦除,我看不出如何.一种可能性是传递Calendar对象,但这会破坏完全使用此方法的主要目的(不必考虑Calendar对象).
如何使第二种方法适用于Calendar的多个子类,就像第一种方法一样?
public static <U extends Calendar> CalendarMatch<U> tpFromCalendar(U dt)
{
// we want to do all comparisons on UTC calendars
dt.setTimeZone(TimeZone.getTimeZone(DEFAULT_TZ_ID));
return new CalendarMatch<U>(dt);
}
public static CalendarMatch<GregorianCalendar> tpDailyGregorian(int h)
{
GregorianCalendar dt = new GregorianCalendar(TimeZone.getTimeZone(DEFAULT_TZ_ID));
dt.clear();
dt.set(Calendar.HOUR, h);
// this works because of type inference
return tpFromCalendar(dt);
}
Run Code Online (Sandbox Code Playgroud)
这里绝对没有必要使用反射.所以不要!
public static <U extends Calendar> CalendarMatch<U> tpDailyGregorian(
int h, CalendarFactory<U> factory
) {
Calendar dt = factory.create(TimeZone.getTimeZone(DEFAULT_TZ_ID));
dt.clear();
dt.set(Calendar.HOUR, h);
// this works because of type inference
return tpFromCalendar(dt);
}
Run Code Online (Sandbox Code Playgroud)
哪里:
public interface CalendarFactory<U extends Calender {
U create(TimeZone timeZone);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
257 次 |
| 最近记录: |