Pertanyaan Membuat kelas Anda sendiri 'sebanding'


Saya mengikuti tutorial, tetapi gagal membuat saya Country kelas Comparable untuk ku BST.

Utama:

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

Kelas negara:

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;
    }
}

kesalahan:

@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

Nama bentrokan: Metode compareTo (Object) dari tipe Negara memiliki penghapusan yang sama seperti compareTo (T) dari tipe Comparable tetapi tidak mengesampingkannya Country.java / Lab2_prob 4 / src line 17 Java Problem

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

dan kelas:

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

Description Resource    Path    Location    Type

Jenis Negara harus menerapkan metode abstrak yang diwariskan Comparable.compareTo (Negara) Country.java / Lab2_prob 4 / src line 2 Java Problem


4
2017-10-24 14:42


asal


Jawaban:


Anda Country kelas harus diimplementasikan Comparable:

public class Country implements Comparable<Country>

Maka Anda compareTo metode harus terlihat seperti ini:

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

Perhatikan tanda tangan dari compareTo. Pengaruhnya bisa (dan harus) bertipe Country tidak Object. Ini dicapai karena parameter tipe generik aktif Comparable. Keuntungannya adalah Anda tidak perlu memeriksa jenisnya lagi. Kelemahannya adalah Anda hanya bisa membandingkan Country ke lainnya Country objek (atau subtipe) tetapi dalam banyak kasus ini adalah apa yang Anda inginkan. Jika tidak, Anda harus mengubah parameter jenis. Misalnya. jika kamu gunakan Comparable<Object> tanda tangan dari compareTo dapat Object lagi. Anda dapat membaca tentang generik sini jika Anda menghendaki.


17
2017-10-24 14:50



Sebuah Sebanding harus kembali:

bilangan bulat negatif, nol, atau bilangan bulat positif karena objek ini kurang   dari, sama dengan, atau lebih besar dari objek yang ditentukan.

Namun, kode Anda hanya mengembalikan -1 atau 0, yang mana tidak benar; ini menyiratkan itu this bisa kurang dari objek lain, atau sama, tetapi tidak lebih besar!

Tidak perlu memodifikasi nilai yang dikembalikan oleh name.compareTo() - Anda bisa langsung mengembalikannya.


5
2017-10-24 14:47