Lors de la gestion d'une classe qui n'implémente pas Comparable with TreeSet etc., la spécification est telle qu'une erreur d'exécution (ClassCastException) est générée au lieu d'une erreur de compilation. On pense que cela suppose une scène dans laquelle la classe parent n'implémente pas l'interface Comparable et la classe enfant implémente Comparable lors de l'utilisation de génériques.
La classe parent Musician n'implémente pas Comaparable, contrairement à la classe enfant.
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;
}
}
Courir
Set<Musician> musicianSet = new TreeSet<>();
musicianSet.add(new ChildMusician());
S'il n'y a pas de classe enfant, il serait plus efficace d'émettre une erreur de compilation sur la première ligne, mais comme il peut y avoir des classes enfants, le cast est vérifié à l'exécution.
Recommended Posts