J'ai la classe suivante:Mettre en œuvre CompareTo correctement
//GetHasCode, toString, and equalsTo removed to keep the question simple.
private String weaponName;
private String weaponType;
private int weaponDamage;
public WeaponObject(String name, String type, int damage)
{
this.weaponName = name;
this.weaponType = type;
this.weaponDamage = damage;
}
@Override
public int compareTo(WeaponObject compare) {
int name = this.getWeaponName().compareTo(compare.getWeaponName());
int type = this.getWeaponType().compareTo(compare.getWeaponType());
int damage = Integer.compare(this.weaponDamage, compare.getWeaponDamage());
if(name !=0)
{
return name;
}
if(type != 0)
{
return type;
}
if(damage != 0)
{
return damage;
}
return 0;
}
Sous-classe:
public class Sword extends WeaponObject {
private String swordAttahment;
public Sword(String name, String type, int damage, String attachment) {
super(name, type, damage);
this.swordAttahment = attachment;
}
public String getSwordAttahment() {
return swordAttahment;
}
@Override
public int compareTo (WeaponObject compare)
{
int superCompare = super.compareTo(compare);
if(superCompare != 0)
{
return superCompare;
}
Sword other = (Sword)compare;
int attach = this.getSwordAttahment().compareTo(other.getSwordAttahment());
if(attach != 0)
{
return attach;
}
return 0;
}
Questions:
Étant donné que J'ai une épée
class
queextends
WeaponObject, ai-je correctement mis en œuvre moncompareTo
dans la classe Sword?Si ce qui précède n'est pas correct, alors comment implémenter correctement la méthode
compareTo
dans ma sous-classe?
'Sword.compareTo()' 'jetteront un ClassCastException' si vous essayez de comparer à un' WeaponObject'. – shmosel
@shmosel - Comment le réparer? –
WeaponObject n'a pas la méthode 'getSwordAttahment()'. Donc, vous ne pouvez pas faire une comparaison basée sur 'swordAttahment'. – rdonuk