我喜欢自上而下地思考,而不是自下而上地思考,因此这里是我的最终目标:
我的目标:用不同的“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;
}
};
1条答案
按热度按时间x8goxv8g1#
答案往往就在问题的内部。。。这里就是这样!
我提出的解决方案是在枚举周围 Package 一个“类”,以使它们“可实现”。
这个案子解决了,很明显。。。但这是唯一/最好的解决方案吗?