[Java] Pourquoi aucune erreur de compilation ne se produit pour les classes qui n'implémentent pas Comparable

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.

Exemple

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

[Java] Pourquoi aucune erreur de compilation ne se produit pour les classes qui n'implémentent pas Comparable
Rails <% = expression%> Pourquoi aucune erreur ne se produit lorsqu'il est vide
[Java] explique ConcurrentModificationException qui se produit dans java.util.ArrayList pour les nouveaux arrivants
Résumé des mots réservés Java inconnus de manière inattendue