Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一个集合中不同类型对象的其他选项_Java_Oop - Fatal编程技术网

Java 一个集合中不同类型对象的其他选项

Java 一个集合中不同类型对象的其他选项,java,oop,Java,Oop,我意识到将不同类型的对象放在一个集合中通常是一个坏主意,我可以通过将类型设置为“对象”来实现这一点,但我有一种情况,我想不出其他选择,希望其他人可以 情况: 在一场比赛的回合结束时,我希望玩家能有效地从牌组中拿起一张牌。该卡将是三种类型的卡之一。通常卡会进入玩家的手中,允许玩家执行标准动作,但我希望玩家有机会获得一张特殊卡,其动作针对该卡,并且玩家有机会获得一张立即采取行动的卡,而不是进入玩家的手中。这些类型的卡片没有任何共同点,所以有一个共同的界面似乎没有意义,但我希望它们在卡片组中随机混合,

我意识到将不同类型的对象放在一个集合中通常是一个坏主意,我可以通过将类型设置为“对象”来实现这一点,但我有一种情况,我想不出其他选择,希望其他人可以

情况: 在一场比赛的回合结束时,我希望玩家能有效地从牌组中拿起一张牌。该卡将是三种类型的卡之一。通常卡会进入玩家的手中,允许玩家执行标准动作,但我希望玩家有机会获得一张特殊卡,其动作针对该卡,并且玩家有机会获得一张立即采取行动的卡,而不是进入玩家的手中。这些类型的卡片没有任何共同点,所以有一个共同的界面似乎没有意义,但我希望它们在卡片组中随机混合,所以我希望它们都在一个集合中


有人有什么设计建议吗?(我对OO设计相当陌生)

您使用界面的想法是正确的。但是,您不需要让“特别行动卡”实现一个
接口:为它创建一个不同的接口(例如,
Deckable
),让
接口继承它,然后在“特别行动卡”类中实现该接口

现在,您可以创建一个可折叠的列表,并将您的特殊卡片混合到其中:

List<Deckable> deck = new ArrayList<Deckable>();
List deck=newarraylist();

它们都是可以抽出的卡吗?他们在游戏中都有特殊的目的?那么它们有没有共同点呢?你应该为此制作一个共同的接口或一个抽象的超类
Card
。我无法想象这三种类型完全没有共同之处。它们都是卡片,它们可以被抽出来,它们有一种类型。它们是卡片,所以它们有一些共同点!实现一个“Card”类,并对其进行扩展。是的,它们都可以被绘制,但绘制时它们的行为并不相同,因为一种类型立即被使用,而其他类型则由用户掌握。对我来说,在抽象类中只有一个方法并在其中一个子类中重写它似乎很奇怪,但如果这是正常的话,我会选择它。啊,这正是我想要的想法。谢谢。另外,接口可以完全没有方法,这是正常的,例如java.io。Serializable@kornero你是对的-创建一个没有方法的接口是可以的。然而,现在标记接口应该是个例外,因为您可以使用注释执行类似的操作。事实上,如果注释当时可用,
Serializable
可能会通过它们实现。
List<Deckable> deck = new ArrayList<Deckable>();