【问题标题】:Select appropriate enum class based on class member根据类成员选择适当的枚举类
【发布时间】:2021-03-13 07:43:24
【问题描述】:

我有一个描述子类的一般功能的抽象类。 当我初始化一个子类时,我想将一个特定的枚举类设置为父抽象类的成员。 我该怎么做?

示例: 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;
    }
}

Child1.java

public class Child1 extends AbstractFunctionality {
    public Child1(){
        super("Jane","Austen");
    }
}

如何在Child1 类中指定我想要public enum Writers

【问题讨论】:

    标签: java enums extends


    【解决方案1】:

    更简单的方法是添加enum类型作为抽象类的字段参数的类型:

    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;
        }
    }
    

    子类:

    public class Child1 extends AbstractFunctionality {
        public Child1(){
            super("Jane","Austen", Writers.SOME_FIELD);
        }
    }
    

    或者,您可以让您的枚举 Writers 实现更通用的 interface 让我们说 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;
        }
    }
    

    界面:

    public interface IWriters {
         ... 
    }
    

    枚举:

    public enum Writers implements IWriters{
        ...
    }
    

    这种方法的好处是您可以有不同的枚举类型实现相同的接口,因此它们也可以用于抽象类。

    【讨论】:

      【解决方案2】:

      也许你可以在抽象类中设置泛型

      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;
          }
      

      在子类中

      public class Child1 extends AbstractFunctionality<Writers> {
          public Child1(){
              super("Jane","Austen",Writers.POEM);
          }
      }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多