Tengo una clase absract que describe una funcionalidad general de las clases de niños. Cuando inicializo una clase secundaria, quiero establecer una clase de enumeración específica como miembro de la clase abstracta principal. ¿Cómo puedo hacer eso?
Ejemplo: AbstractFunctionality.java
public abstract class AbstractFunctionality { protected String Name; protected String Surname; // specific enum class public AbstractFunctionality(String Name, String Surname){ this.Name = Name; this.Surname = Surname; } }Niño1.java
public class Child1 extends AbstractFunctionality { public Child1(){ super("Jane","Austen"); } } ¿Cómo puedo especificar que quiero los escritores de public enum Writers en mi clase Child1 ?
El enfoque más simple es simplemente agregar el tipo de enum como el tipo del parámetro de campo de la clase abstracta:
public abstract class AbstractFunctionality { protected String Name; protected String Surname; Writers writers; public AbstractFunctionality(String Name, String Surname, Writers writers){ this.Name = Name; this.Surname = Surname; this.writers = writers; } }la subclase:
public class Child1 extends AbstractFunctionality { public Child1(){ super("Jane","Austen", Writers.SOME_FIELD); } } Alternativamente, puede hacer que sus Enum Writers implementen una interface más general, digamos IWriters
public abstract class AbstractFunctionality { protected String Name; protected String Surname; protected IWriters writers; public AbstractFunctionality(String Name, String Surname, IWriters writers){ this.Name = Name; this.Surname = Surname; this.writers = writers; } }La interfaz:
public interface IWriters { ... }la enumeración:
public enum Writers implements IWriters{ ... }El beneficio de este enfoque es que puede tener diferentes tipos de enumeraciones implementando la misma interfaz y, por lo tanto, también se pueden usar en la clase abstracta.
Tal vez puedas configurar genérico en clase abstracta
public abstract class AbstractFunctionality<T extends Enum<T>> { protected String Name; protected String Surname; T specificEnum public AbstractFunctionality(String Name, String Surname,T specificEnum){ this.Name = Name; this.Surname = Surname; this.specificEnum=specificEnum; }en la subclase
public class Child1 extends AbstractFunctionality<Writers> { public Child1(){ super("Jane","Austen",Writers.POEM); } } }