2016-05-07 13 views
0

Ich habe Objekte, die eine Schnittstelle implementieren, so dass bestimmte Methoden verfügbar sind (getTime, getValue, etc).Schnittstellen und Vergleichbare

Allerdings möchte ich auch diese Objekte sortierbar in der gleichen Weise mit Comparable, aber ich kann keine Körper in der Schnittstelle (zumindest in Android Java) zu erzwingen.

Was kann ich tun?

Antwort

3

Sie können Körper in einer Schnittstelle definieren die default Schlüsselwort (die nicht Teil der Signatur ist):

public interface MyInterface extends Comparable<MyInterface> { 

    @Override 
    default int compareTo(MyInterface other) { 
     return 0; 
    } 

} 

Wenn Sie jedoch auf verschiedenen Kriterien ab und sortieren möchten. Ein Vergleich mit der sort Methode ist eine viel bessere Wahl.

public interface MyInterface { 
    int getTime(); 
    int getValue(); 
} 

Dann rufen Sie wie:

List<MyInterface> list= ...; 
list.sort((mi1, mi2) -> Integer.compare(mi1.getTime(), mi2.getTime())); // sorts by time 
list.sort((mi1, mi2) -> Integer.compare(mi1.getValue(), mi2.getValue())); // sorts by value 
+0

Was meinst du nicht Teil der Signatur? Was bedeutet Ausfall eigentlich hier? –

+0

Was wäre, wenn ich zwei Schnittstellen implementiert hätte, die widersprüchliche vergleichbare Methoden haben? –

+0

@ArukaJ Was ich damit meine, ist, dass die '' 'compareTo''' Methode in' '' Comparable <...> '' 'nicht das' '' default''' Schlüsselwort hat. Das Überschreiben der Methode '' compareTo''' mit dem Standardschlüsselwort ist jedoch weiterhin möglich. Sie können nur eine Methode mit derselben Signatur überschreiben. –