Bei der Behandlung einer Klasse, die Comparable with TreeSet usw. nicht implementiert, ist die Spezifikation so, dass anstelle eines Kompilierungsfehlers ein Laufzeitfehler (ClassCastException) ausgelöst wird. Es wird angenommen, dass dies eine Szene voraussetzt, in der die übergeordnete Klasse die Comparable-Schnittstelle nicht implementiert und die untergeordnete Klasse die Comparable implementiert, wenn Generika verwendet werden.
Die übergeordnete Musician-Klasse implementiert Comaparable nicht, die untergeordnete Klasse jedoch.
class Musician {
public enum Category {
ROCK, JAZZ, CLASSIC
}
public String getName() {
return name;
}
public Category getCategory() {
return category;
}
private String name;
private Category category;
Musician(String name, Category category) {
this.name = name;
this.category = category;
}
}
class ChildMusician extends Musician implements Comparable {
ChildMusician() {
super("", null);
}
@Override
public int compareTo(Object o) {
return 0;
}
}
Lauf
Set<Musician> musicianSet = new TreeSet<>();
musicianSet.add(new ChildMusician());
Wenn keine untergeordnete Klasse vorhanden ist, ist es effizienter, in der ersten Zeile einen Kompilierungsfehler auszugeben. Da jedoch möglicherweise untergeordnete Klassen vorhanden sind, wird die Umwandlung zur Laufzeit überprüft.
Recommended Posts