Dans le code ci-dessous, je voudrais que la deuxième méthode soit générique, aussi, mais depuis que je crée l'objet Calendar dans la méthode, à cause de type erasure, je ne vois pas comment. Une possibilité serait de passer dans l'objet Calendar, mais cela irait à l'encontre de l'objectif principal d'avoir cette méthode du tout (ne pas avoir à penser aux objets Calendar).Java: Les génériques ne fonctionneront pas pour ma méthode, que puis-je faire d'autre?
Comment puis-je faire fonctionner la deuxième méthode pour plusieurs sous-classes de Calendar, comme le fait la première méthode?
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);
}
Ce qui est vrai - mais alors vous devez avoir une classe CalendarFactory par la sous-classe de calendrier. Evidemment ce n'est pas un gros problème pour Calendar mais c'est (évidemment) un problème pour d'autres classes génériques (comme EnumSet par exemple). –
Malgré la syntaxe épouvantable de Java, ce n'est pas trop mal d'écrire une classe interne anonyme. –
Je suppose que non :-) Le vôtre est une meilleure suggestion bien sûr –