繁体   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