Por favor, vea Java Enum definition y Why in java enum is declared as Enum<E extends Enum<E>> para una discusión general. Aquí me gustaría saber cuál sería rota (no Typesafe más, o que requieren moldes adicionales, etc.) si la clase Enum se definió como¿Qué sería diferente en Java si la declaración Enum no tenía la parte recursiva
public class Enum<E extends Enum>
Estoy usando este código para probar mis ideas:
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 él no pude encontrar ningún beneficio en este caso exacto.
PS. el hecho de que no se me permite hacer
class ThirdEnum extends MyEnum<SecondEnum> {}
cuando MyEnum se define con la recursividad es
a) no es relevante, ya que con enumeraciones reales no se le permite hacer eso sólo porque no se puede extender enumeración usted mismo
b) no es verdad - pls intentarlo en un compilador y ver que de hecho es capaz de compilar sin errores
PPS. Cada vez me inclino más a creer que la respuesta correcta sería "nada cambiaría si eliminas la parte recursiva", pero no puedo creerlo.
sólo una pequeña nota, 'o.util2 (este)' no compilar ya que se considera MyEnum no E. Se podría añadir un segundo parámetro 'o1' E y llamar' o.util2 (o1) 'si fuera la misma efecto: se compilará con 'E se extiende MyEnum ', pero no con' E se extiende MyEnum > ' –
Gracias, acabo corregido ese error. –
¡gracias! ¡ese código de hecho está marcado como inseguro si elimina la recursión! ¿Conoces algún uso real de esa función en jdk? – atamur