具有不同类型子类(包括enum)的java对象

hs1ihplo  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(584)

我喜欢自上而下地思考,而不是自下而上地思考,因此这里是我的最终目标:
我的目标:用不同的“plqryelement”构建一个“aquery”(pl代表“playlist”,因为这里的上下文是音乐播放列表管理器的“smart playlist”):

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

显然,我应该示例化“plqry\u元素”,然后使用 aQuery.add(...); . 我的最终查询结果。
以下是可能的“plqry\u元素”:
一个“plqryel\u parentese”(开或关,括号)-->我用“enum”来表示这个
一个“plqryel\u条件”(一个有自己构建的条件)-->我为此使用了一个特定的对象
一个“plqryle\u booloperator”(本质上是'and'/'or')-->我使用了'enum'来实现这个
我会怎么想:
使用抽象类:所有“plqryelement”都应该是抽象类“plqryelement”的子类。但这显然不适用于不“可实现”的“enum”。
另一个想法是使用多态性。。。无法让它工作。
问:我怎样才能实现我的第一个目标。。。不将“enum”对象更改为“class”?
任何帮助都将不胜感激!!!提前谢谢;—)。。。
以下是没有“implements”的类:
圆括号-->

package application.query.element;

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

    String symbol;

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

plqryel\ U条件-->

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

plqryle\u booloperator-->

package application.query.element;

    public enum PlQryEl_BoolOperator {
        LINK_OR("or"),
        LINK_AND("and");

        String symbol;

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

有趣的是,这里有关于“plqryle\u condition”类的对象:
plqryl\u cond\u对象-->

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

plqryl\u cond\u操作符-->

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

x8goxv8g1#

答案往往就在问题的内部。。。这里就是这样!
我提出的解决方案是在枚举周围 Package 一个“类”,以使它们“可实现”。
这个案子解决了,很明显。。。但这是唯一/最好的解决方案吗?

相关问题