Java对象,具有不同类型的子类,包括枚举



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

我的目标:;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;
}
};

答案往往在问题内部。。。这里就是这样!

我提出的解决方案是在枚举周围包装一个"类",以使它们"可实现"。

这解决了,显然情况。。。但这是唯一/最好的解决方案吗?

最新更新