Comparator-Interface implementiert, in einer geschachtelten Klasse

Ich bin neu auf stackoverflow.com aber habe ich oft verwendet, um die Suche nach Antworten, Wann immer ich ein problem hatte, aber jetzt kann ich nicht finden Ergebnis auf der Suche für mein problem, also Frage ich hier 🙂
Ich studiere für die OCPJP SE 7-Zertifizierung Prüfung 1Z0-804, und ich bin mit einem Buch (es gibt nur eine verfügbar ist, soweit ich weiß, Ganesh\Sharma)
In den Kollektionen Kapitel, über das Comparator-interface, das Buch bieten dieses Beispiel für die Verwendung der Komparator und der Vergleichbaren Schnittstelle ein array Sortieren der Student Elemente, aber die Frage ist über den Komparator:

import java.util.*;

class Student implements Comparable<Student> {
    private String id, name;
    private Double cgpa;
    public String getName() {
        return name;
    }
    public String getId() {
        return id;
    }
    public Double getCgpa() {
        return cgpa;
    }
    public Student(String studentId, String studentName, double studentCGPA) {
        id=studentId;
        name=studentName;
        cgpa=studentCGPA;
    }
    public String toString() {
        return id+" "+name+" "+cgpa;
    }
    public int compareTo(Student that) {
        return this.id.compareTo(that.id);
    }
}

class StudentCGPA implements Comparator<Student> {
    public int compare(Student s1, Student s2) {
        return s1.getCgpa().compareTo(s2.getCgpa());
    }
}

class MyMainClass {
    public static void main(String[] args) {
        Student[] students =    {   new Student("cs011", "Lennon", 3.1),
                                    new Student("cs021", "McCartney", 3.4),
                                    new Student("cs012", "Harrison", 2.7),
                                    new Student("cs022", "Starr", 3.7),
                                };
        Arrays.sort(students, new StudentCGPA());
        System.out.println(Arrays.toString(students));
    }
}

So schafft es eine neue Klasse nur für die Verwendung des Comparator-interface mit zwei Student-Objekte, aber ich denke, das ist sehr unangenehm, so Frage ich mich: warum kann ich nicht verwenden eine verschachtelte Klasse (innerhalb Student)? Wie diese:

import java.util.*;

class Student implements Comparable<Student> {
    private String id, name;
    private Double cgpa;
    public String getName() {
        return name;
    }
    public String getId() {
        return id;
    }
    public Double getCgpa() {
        return cgpa;
    }
    public Student(String studentId, String studentName, double studentCGPA) {
        id=studentId;
        name=studentName;
        cgpa=studentCGPA;
    }
    public String toString() {
        return id+" "+name+" "+cgpa;
    }
    public int compareTo(Student that) {
        return this.id.compareTo(that.id);
    }
    static class StudentCGPA implements Comparator<Student> {
        public int compare(Student s1, Student s2) {
            return s1.getCgpa().compareTo(s2.getCgpa());
        }
    }
}

class MyMainClass {
    public static void main(String[] args) {
        Student[] students =    {   new Student("cs011", "Lennon", 3.1),
                                    new Student("cs021", "McCartney", 3.4),
                                    new Student("cs012", "Harrison", 2.7),
                                    new Student("cs022", "Starr", 3.7),
                                };
        Arrays.sort(students, new Student.StudentCGPA());
        System.out.println(Arrays.toString(students));
    }
}

Des Buches sagt nichts über die Verwendung von verschachtelten Klassen statt der normalen, aber ich kann nicht sehen, warum sollte es schlecht sein zu tun, wie dieser... gibt es irgendein problem mit meinem code (die 2.)? Sollte ich dem Folgen, was das Buch sagt, weil meine Implementierung der Komparator ist falsch? (Hinweis: der code wird kompiliert und läuft ohne problem, mit dem erwarteten Ausgang in beiden Fällen)

[cs012 Harrison 2.7, cs011 Lennon 3.1, cs021 McCartney 3.4, cs022 Starr 3.7]

Bitte helfen 😀 Danke im Voraus.

Mehrere Klassen pro compilation unit sind eine fast veraltetes feature von Java. Sie sollten immer lieber geschachtelte Klassen.
Wenn Sie eine separate Comparator dann ist es gute Praxis, um Ihre Quelle in einer separaten Datei. Das ist kein argument für oder gegen die Verschachtelung der Comparator Klasse. Sehr wahrscheinlich, dass das Buch, aus denen die original-Quelle gezogen wird, stellt es, da es für Komfort und Klarheit.

InformationsquelleAutor RaffoSorr | 2014-10-07

Schreibe einen Kommentar