我喜欢自上而下而不是自下而上思考,所以这是我的最终目标:
我的目标:;aQuery";用不同的";PlQryElement";s(Pl代表"播放列表",因为这里的上下文是音乐播放列表管理器的"智能播放列表"(:
List<PlQry_Element> aQuery = new ArrayList<PlQry_Element>();
显然,我应该实例化"PlQry_Elements",然后使用aQuery.add(...);
。建立我的最终查询的结果。
这是";PlQry_Element";可能:
- A";PlQryEl_ Parentese";(打开或关闭,括号(->我用了enum
- A";PlQryEl_ Condition;(一种具有自身积累的条件(->我用了一个特定的对象
- A";PlQryEl_BoolOperator";(本质上是"与"/"或"(-->我用了enum
我的想法:
- 使用抽象类:All"PlQryEl_"应该是来自抽象类"的子类;PlQryElement";。但这显然不适用于不是"枚举"的"enum";可实施">
- 另一个想法是使用多态性。。。无法使其工作
问题:我如何才能实现我的第一个目标。。。不将我的"enum"对象更改为"classes"?
如有任何帮助,我们将不胜感激!!!提前感谢;-(。。。
以下是没有"implements"的类:
PlQryEl_Parenthes-->
package application.query.element;
public enum PlQryEl_Parenthese {
PARENTHESES_OPEN("("),
PARENTHESES_CLOSE(")");
String symbol;
PlQryEl_Parenthese(String symbol) {
this.symbol = symbol;
}
};
PlQryEl_条件-->
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;
}
};
答案往往在问题内部。。。这里就是这样!
我提出的解决方案是在枚举周围包装一个"类",以使它们"可实现"。
这解决了,显然情况。。。但这是唯一/最好的解决方案吗?