【问题标题】:Java Object with subclasses of different type including enum具有不同类型子类的 Java 对象,包括枚举
【发布时间】:2020-12-03 20:56:53
【问题描述】:

我喜欢自上而下而不是自下而上,所以这就是我的最终目标:

我的目标: 使用不同的“PlQryElement”构建的“aQuery”(Pl 代表“播放列表”,因为这里的上下文是音乐播放列表管理器的“智能播放列表”):

List<PlQry_Element> aQuery = new ArrayList<PlQry_Element>();

我显然应该实例化“PlQry_Elements”,然后使用aQuery.add(...);。构建我的最终查询的结果。

这是可能的“PlQry_Element”:

  • “PlQryEl_Parentese”(打开或关闭,括号)-->我为此使用了“枚举”
  • “PlQryEl_Condition”(有自己建立的条件)-->我为此使用了特定对象
  • “PlQryEl_BoolOperator”(本质上是“与”/“或”)--> 我为此使用了“枚举”

我的想法:

  • 使用抽象类:所有“PlQryEl_...”都应该是抽象类“PlQryElement”的子类。但这显然不适用于不可“实施”的“枚举”。
  • 另一个想法是使用多态性...无法让它工作。

问题: 我怎样才能实现我的第一个目标...而不将我的“枚举”对象更改为“类”?

任何帮助将不胜感激!!!提前谢谢你;-)...


以下是没有“实现”的类:

PlQryEl_Parenthese -->

package application.query.element;

public enum PlQryEl_Parenthese {
    PARENTHESES_OPEN("("),
    PARENTHESES_CLOSE(")");

    String symbol;
    
    PlQryEl_Parenthese(String symbol) {
        this.symbol = symbol;
    }
};

PlQryEl_Condition -->

package application.query.element;

import application.query.element.cond.PlQryEl_Cond_Object;
import application.query.element.cond.PlQryEl_Cond_Operator;

public class PlQryEl_Condition {
    PlQryEl_Cond_Object aObject = PlQryEl_Cond_Object.PLAYLIST;
    String sField="";
    PlQryEl_Cond_Operator aOparator = PlQryEl_Cond_Operator.EQUAL;
    String sValue = "";
    
    public PlQryEl_Condition(PlQryEl_Cond_Object aObject, String sField, PlQryEl_Cond_Operator aOparator, String sValue) {
        super();
        this.aObject = aObject;
        this.sField = sField;
        this.aOparator = aOparator;
        this.sValue = sValue;
    }
};

PlQryEl_BoolOperator -->

    package application.query.element;
    
    public enum PlQryEl_BoolOperator {
        LINK_OR("or"),
        LINK_AND("and");
    
        String symbol;
        
        PlQryEl_BoolOperator(String symbol) {
            this.symbol = symbol;
        }
    };

感兴趣的是这里有关于“PlQryEl_Condition”类的对象:

PlQryEl_Cond_Object -->

package application.query.element.cond;

public enum PlQryEl_Cond_Object {
    PLAYLIST("Playlist","vPlaylist"),
    TRACK("Track","vTrack");

    String symbol;
    String dbViewName;
    
    PlQryEl_Cond_Object(String symbol, String dbViewName) {
        this.symbol = symbol;
        this.dbViewName = dbViewName;
    }
};

PlQryEl_Cond_Operator -->

package application.query.element.cond;

public enum PlQryEl_Cond_Operator {
    EQUAL("="),
    GREATER(">"),
    SMALLER("<"),
    EMPTY("is empty (null, NA, ...)"),
    INLIST("in list");

    String symbol;
    String dbViewName;
    
    PlQryEl_Cond_Operator(String symbol) {
        this.symbol = symbol;
    }
};

【问题讨论】:

    标签: java enums polymorphism abstract-class subclass


    【解决方案1】:

    答案往往就在问题中......这里就是这种情况!

    我采用的解决方案是在枚举周围包裹一个“类”,以使它们“可实施”。

    这解决了,显然是这样……但它是唯一/最好的解决方案吗?

    【讨论】:

      猜你喜欢
      • 2021-12-22
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多