簡體   English   中英

Java Object 具有不同類型的子類,包括枚舉

[英]Java Object with subclasses of different type including enum

我喜歡考慮自上而下而不是自下而上,所以這直接是我的最終目標:

我的目標:使用不同的“PlQryElement”構建的“aQuery”(Pl 代表“播放列表”,因為這里的上下文是音樂播放列表管理器的“智能播放列表”):

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

我顯然應該實例化“PlQry_Elements”,然后使用aQuery.add(...); . 建立我的最終查詢的結果。

這是可能的“PlQry_Element”:

  • 一個“PlQryEl_Parentese”(打開或關閉,括號)->我為此使用了“枚舉”
  • 一個“PlQryEl_Condition”(一個自己建立的條件)——>我為此使用了一個特定的 object
  • 一個“PlQryEl_BoolOperator”(本質上是“與”/“或”)——>我為此使用了“枚舉”

我會怎么想:

  • 使用抽象 class:所有“PlQryEl_...”都應該是抽象 class“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”class 的對象:

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

答案往往就在問題之內……這里就是這種情況!

我采用的解決方案是在枚舉周圍包裹一個“類”,以使它們“可實施”。

這解決了,顯然是這樣......但它是唯一/最好的解決方案嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM