制作自己的类“可比”(Making your own class 'Comparable&#

2019-07-02 12:43发布

我也跟着教程,但未能使我CountryComparable我的BST

主要:

BinarySearchTree A = new BinarySearchTree();
Country a = new Country("Romania", "Bucharest", 1112);
A.insert(a);

国家类:

public int compareTo(Object anotherCountry) throws ClassCastException {
    if (!(anotherCountry instanceof Country))
        throw new ClassCastException("A Country object expected.");
    String anotherCountryName = ((Country) anotherCountry).getName();  
    int i = this.name.compareTo(anotherCountryName);
    if(i < 0){
        return -1;
    } else {
        return 0;
    }
}

错误:

@Override
public int compareTo(Object anotherCountry) throws ClassCastException {
    if (!(anotherCountry instanceof Country))
      throw new ClassCastException("A Country object expected.");
    String anotherCountryName = ((Country) anotherCountry).getName();  
    return this.name.compareTo(anotherCountryName);

Description Resource    Path    Location    Type

名称冲突:该方法的compareTo(对象)类型国家的具有可比类型的相同擦除作为的compareTo(T),但不覆盖它Country.java / Lab2_prob 4 / SRC线17的Java问题

Description Resource    Path    Location    Type
The method compareTo(Object) of type Country must override or implement a supertype method  Country.java    /Lab2_prob 4/src    line 17 Java Problem

和类:

public class Country implements Comparable<Country>{
    private String name;
    private String capital;
    private int area;

Description Resource    Path    Location    Type

类型国家必须实现继承抽象方法Comparable.compareTo(国家或地区)Country.java / Lab2_prob 4 / SRC 2行的Java问题

Answer 1:

你的Country类实现Comparable

public class Country implements Comparable<Country>

那么你的compareTo方法应该是这样的:

@Override
public int compareTo(Country anotherCountry) {
    return anotherCountry.getName().compareTo(this.name);
}

需要注意的签名compareTo 。 该放慢参数可以(而且必须)是类型的Country没有Object 。 这是因为在泛型类型参数的实现Comparable 。 有利的一面是,你不必再检查类型。 缺点是,你只能比较Country与其他Country的对象(或它的亚型),但在大多数情况下,这是你想要的呢。 如果没有,你必须改变类型参数。 例如,如果您使用的Comparable<Object>的签名compareTo可以Object一次。 您可以在仿制药读了这里 ,如果你想。



Answer 2:

一个可比应该返回:

负整数,零或正整数,根据此对象是比指定的对象小于,等于,或更大。

然而,你的代码只返回-1或0,这是不正确的; 这意味着this可能小于其他物体,或等于,但不大于!

没有必要修改返回的值name.compareTo() -你可以直接归还。



文章来源: Making your own class 'Comparable'