Java:泛型不适用于我的方法,我还能做什么?

Han*_*etz 2 java generics

在下面的代码中,我希望第二种方法也是通用的,但是因为我在方法中创建了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)

Tom*_*ine 5

这里绝对没有必要使用反射.所以不要!

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)