gpt4 book ai didi

Java 引用未初始化的类

转载 作者:行者123 更新时间:2023-12-02 06:36:37 27 4
gpt4 key购买 nike

我有一个带有 6 个子类的父类(super class)。我有一个带有字符串键和子类集合值的 HashMap 。我正在定义一个方法,该方法可以将父类(super class)作为参数并将其放入 HashMap 中的正确集合中。为了找到正确的 key ,我使用“istanceof”。现在,当我尝试将父类(super class)参数添加到解锁 key 时,我预计(我实际上无法编译我的程序)会出现编译时错误,因为我还没有进行强制转换。我无法使变量引用类。据我所知,它需要引用一个对象。我可以让它引用Class<Subclass>.但我仍然无法从那里取得进展。

    public void addCard(AttackCard card) {
String category = null;
AttackCard type = null; <-- I would like to make this refer to e.g. Assassin
if (card instanceof Assassin) {
category = "assassins";
}if (card instanceof Fighter) {
category = "fighters";
}if (card instanceof Mage) {
category = "mages";
}if (card instanceof Marksman) {
category = "marksmen";
}if (card instanceof Support) {
category = "supports";
}if (card instanceof Tank) {
category = "tanks";
}
attackPool.get(category).get(card.getTier()).add(card)
}

需要注意的两件事:

1)子类是抽象的,无法初始化?

2) 我的 HashMap 实际上是 HashMap<String, Hashmap<Enum, ArrayList<Subclass>>>

那么我应该如何将我的卡转换为特定子类?

最佳答案

鲍里斯是对的。

为了简单起见,只需添加 addToPool(Map<String, EnumMap <Enum, List<AttackCard >>> pool)到您的 AttackCard 类并在每个子类中实现它以将其自身添加到正确的类别。

这就是一些评论。

强制转换很少是一个好主意,并且通常表示存在设计问题。

我真的没有看到将卡片存储在不同子图中的兴趣,因为您在检索它时必须对其进行转换(以便调用子类特定方法)。 (如果不将整个池仅限于此子类,则无法将子 map 列表键入为子类)。

如果我是你,我会将池设计为具有多个 List<PeculiarSubclass> 类型属性的对象。

否则这与泛型无关,我真的不明白如何在层次结构的底部拥有抽象类。只有 AttackCard 应该是抽象的或接口(interface)

关于Java 引用未初始化的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19575804/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com