簡體   English   中英

從 HashMap (java) 獲取具有特定類的特定對象

[英]Get specific object with specific class from HashMap (java)

我有一包豆類和規則類。

我現在正在嘗試創建我的不同規則的 HashMap 以訪問其他類中的這些不同規則。

在 TripleTriad.java(管理我的游戲的類)中,我有:

public static Map<RuleType, Rule> ruleList = new HashMap<>();

private void createRuleMap(Map<RuleType, Rule> ruleList) {
    ruleList.put(COMBO, new RuleCombo());
    ruleList.put(ELEMENTALE, new RuleElementales());
    ruleList.put(IDENTIQUE, new RuleIdentique());
    ruleList.put(MEMEMUR, new RuleMemeMur());
    ruleList.put(PLUS, new RulePlus());
}

public static Rule callRule(Map<RuleType, Rule> ruleMap, RuleType ruleType) {
    return ruleMap.get(ruleType);
}

我有一個界面規則(嘗試使用界面但不確定我在做什么)。

然后我有我不同的規則。 例如:

public class RuleCombo implements Rule {
    public RuleCombo() {

    }

    public static void resolveRule(Tile tilePosee, FrameTT frame, Board board) {
        if (ruleExisting(IDENTIQUE)) {
            RuleIdentique.resolveRule(tilePosee, frame, board);
        }
        if (ruleExisting(PLUS)) {
            RulePlus.resolveRule(tilePosee, frame, board);
        }
        for (Direction direction : Direction.values()) {
            Tile tileDirection = getAdjacentTile(tilePosee, direction, board);
            if (checkTileExist(tileDirection)) {
                if ((tileDirection.getPlayer() != tilePosee.getPlayer()) && checkTileIsOccupied(tileDirection)) {
                    if (ruleExisting(ELEMENTALE)) {
                        RuleElementales.resolveRule(tilePosee, tileDirection, direction, frame, board);
                    } else {
                        cardPoseeWin(tilePosee, tileDirection, direction, frame, board);
                    }
                }
            }
        }
    }
}

實際上resolveRule() 方法是靜態的,而且似乎不是那么好。 問題是,每個規則都可以調用另一個規則。 這就是為什么我嘗試使用 HashMap 和靜態方法來獲取我的規則對象。

要正確使用它,我必須寫:

RuleCombo ruleCombo = (RuleCombo) callRule(ruleList, COMBO);
ruleCombo.resolveRule(tileDirection, frame, board);

有沒有更好的寫法?

好的,所以我試圖獲取一些有關責任鏈的信息。 我不確定,但我想我明白了。 問題是,對於我找到的那種繪圖,我仍然不明白如何管理兩個相互調用的方法。 我還有一個調用自身的方法(它有效)。 唯一可以通過刪除靜態標志來工作的方法是將我的規則對象放在參數中,但這顯然不是解決方案。

RuleType 是一個枚舉,是的。 對不起,我忘了提...

public enum RuleType { IDENTIQUE, PLUS, COMBO, MEMEMUR, ELEMENTALE }

我認為整個規則部分是一團糟......我只是錯過了一些基礎知識。 可能我不需要接口,每條規則都是抽象類。 在這種情況下,我不必從中創建對象。

暫無
暫無

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

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