【发布时间】: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