我正在尝试使用简洁的班级设计制作纸牌游戏。我想比较2张卡片并返回“价值”最高的一张。
我有一个抽象卡类和从它继承的2个类:
public abstract class Card {...}
public class ColoredCard extends Card {...}
public class TrumpCard extends Card {...}
我想使用一个compare方法,根据卡的子类型,该方法将具有不同的实现逻辑,那样(我将这些方法放在外部的“ Comparator”类中:]]
public class Comparator { //1st subtype combination public Card compare(ColoredCard card, TrumpCard card2) { //implementation using card.specificTrumpCardMethod() //2nd subtype combination public Card compare(ColoredCard card, ColoredCard card2) { //implementation using card.specificColoredCardMethod() and card2.specificColoredCardMethod() //other type combinations }
但是当我从Cards类中调用它时,它会引发编译错误:>
//within any card subclass public Card compareTo(Card c) { return Comparator.compare(this, c); //compilation error because it cant determine "c" variable subtype
您将为此目的推荐哪种设计?有解决这个问题的简便方法吗?
如果可能,我想避免使用
instanceOf
指令或反射。
谢谢,
我正在尝试使用简洁的班级设计制作纸牌游戏。我想比较2张卡片并返回一张具有最高“价值”的卡片。我有一个抽象卡类和从它继承的2个类...
[如果可能,我会在基类上定义一个抽象方法,该方法可以让子类提供其绝对值。然后,可以使基类为Comparable
,并实现使用此值的compareTo()
方法。该值甚至不需要公开显示。
public static abstract class Card implements Comparable<Card> {
@Override
public int compareTo(Card other) {
return Integer.compare(this.value(), other.value());
}
protected abstract int value();
}
public static class ColoredCard extends Card {
@Override
protected int value() {
return 1;
}
}
public static class TrumpCard extends Card {
@Override
protected int value() {
return 10;
}
}
public static void main(String... args) throws Exception {
System.out.println(new TrumpCard().compareTo(new ColoredCard()));
System.out.println(new ColoredCard().compareTo(new TrumpCard()));
}