Por ejemplo, tengo la clase Subscriber y sus objetos subscriber1 , subscriber2 , subscriber3 . ¿Es posible crear una enum que contenga estos objetos? estoy tratando de hacer esto
enum Subscribers{ subscriber1,subscriber2,subscriber3; } Pero obtengo cadenas subscriber1 , subscriber2 , subscriber3 en su lugar. Le agradecería cualquier comentario
El valor en una clase de enumeración siempre es del tipo de la enumeración. Aunque también puede agregar campos y métodos a su clase de enumeración:
enum Subscriber{ subscriber1("s1"),subscriber2("s2"),subscriber3("s3"); private final String name; private Subscriber(String n) { name = n; } public void greet() { System.out.println ("Hello" + name); } }Cuando defines una enumeración:
public enum Subscribers { subscriber1, subscriber2, subscriber3; } Significa que define (es decir, a partir del fragmento proporcionado) 3 objetos únicos de la clase Subscribers . En otras palabras, se trata de instancias absolutamente normales como otras (por ejemplo, new InputStream() ). Y eres libre de implementar lo que quieras en estas clases.
public interface Subscribe { void subscribe(Object obj); } public enum Subscribers implements Subscribe { txtFileSubscriber { private final InputStream in = new InputStream("foo.txt"); public void subscribe(Object obj) { // implementtion } }, xmlFileSubscriber { private final CsvReader reader = new CsvReader("foo.csv"); public void subscribe(Object obj) { // implementtion } } }PD El fragmento dado es solo para mostrar cómo puede extender la enumeración. Esta es una característica muy poderosa.
No. Las constantes de enumeración se heredan de la clase de enumeración.
De la especificación del lenguaje Java :
8.9.1. Constantes de enumeración
El cuerpo de una declaración de enumeración puede contener constantes de enumeración. Una constante de enumeración define una instancia de la clase de enumeración.
Además, las constantes no son útiles si sus suscriptores pueden cambiar después de compilar su código.
Sin embargo, puede hacer cualquiera de las siguientes cosas:
java.util.Set<Subscriber> , por ejemplo, con java.util.HashSet .