Vedere Java Enum definition e Why in java enum is declared as Enum<E extends Enum<E>> per la discussione generale. Qui mi piacerebbe imparare che cosa esattamente si sarebbe rotto (non Typesafe più, o che richiedono ulteriori calchi ecc) che se la classe Enum è stato definito comeChe cosa sarebbe diversa se in Java dichiarazione Enum non ha avuto la parte ricorsiva
public class Enum<E extends Enum>
sto usando questo codice per testare le mie idee:
interface MyComparable<T> {
int myCompare(T o);
}
class MyEnum<E extends MyEnum> implements MyComparable<E> {
public int myCompare(E o) { return -1; }
}
class FirstEnum extends MyEnum<FirstEnum> {}
class SecondEnum extends MyEnum<SecondEnum> {}
Con esso non sono stato in grado di trovare alcun vantaggio in questo caso esatto.
PS. il fatto che io non sono autorizzato a fare
class ThirdEnum extends MyEnum<SecondEnum> {}
quando MyEnum viene definito con la ricorsione è
a) non rilevante, perché con le enumerazioni reali non si è autorizzati a farlo solo perché non è possibile estendere enum
b) non vero - pls provalo in un compilatore e vedi che è in grado di compilare senza errori
PPS. Sono sempre più propenso a credere che la risposta corretta sarebbe "nulla cambierebbe se togli la parte ricorsiva" - ma non ci posso credere.
solo una piccola nota, 'o.util2 (this)' non verrà compilato poiché questo è considerato MyEnum non E. È possibile aggiungere un secondo parametro 'E o1' e chiamare' o.util2 (o1) 'sebbene per lo stesso effetto: si compilerà con 'E estende MyEnum ', ma non con 'E estende MyEnum >' –
Grazie, ho corretto l'errore. –
grazie! quel codice infatti è contrassegnato come non sicuro se si rimuove la ricorsione! Conoscete qualche uso reale di quella funzionalità in jdk? – atamur