Tengo una clase genérica que representa un fragmento de texto. Ese fragmento de texto puede tener cualquiera de varios modos diferentes (diferentes tipos de resaltado). Esos modos están representados por un Enum. El Enum podría ser diferente para cada proyecto, pero debe implementar una interfaz que proporcione un método para combinar 2 de ellos (podría estar resaltado y en negrita). Así que tengo una interfaz:genéricos de Java de genéricos de
public interface TextFragmentMode<E extends Enum<E>> {
/**
* Will combine the supplied mode with the current mode and return the
* result.
*
* @param mode The mode to combine with.
* @return The combined mode.
*/
public E combine(E mode);
}
Entonces mi TextFragment es un recipiente tanto para una cadena de texto, y un modo. Pero cuando intento de declarar la clase:
public class TextFragment<E extends TextFragmentMode<E extends Enum<E>>> {
StringBuilder text;
E mode;
...
me sale el siguiente error:
Syntax error on token "extends", , expected
Que, de acuerdo con eclipsar el resaltado de sintaxis, se refería a la parte
E extends Enum<E>
de el código. ¿Alguien sabe lo que estoy haciendo mal? Debo extrañar algo sobre Generics ...
--------------------- edit -------------- -----
fin estoy tomando el tiempo para leer Effective Java por Josh Bloch (segunda edición), y resulta que él va sobre este caso de uso como artículo 34: Emular enumeraciones extensibles con interfaces. Por mucho que me gustaría decir que la mente genial piense igual ... ¡Eso sería demasiado presumido!
Thx que estaba luchando tan duro con P :) –
Snicolas