Maison  >  Questions et réponses  >  le corps du texte

Lorsque le type Java est forcé d'être converti en type générique V, aucune erreur n'est signalée ?

public class StrictMap<V> extends HashMap<String, V> {

    private static final long serialVersionUID = -3455861209780003757L;

    private String name;

    public StrictMap(int initialCapacity, float loadFactor, String name) {
        super(initialCapacity, loadFactor);
        this.name = name;
    }

    public StrictMap(int initialCapacity, String name) {
        super(initialCapacity);
        this.name = name;
    }

    public StrictMap(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public V put(String key, V value) {
        if (containsKey(key)) {
            throw new RuntimeException("已经存在的key, keyName = " + key);
        }

        if (key.contains(".")) {
            final String shortName = getShortName(key);
            if (containsKey(shortName)) {
                // question 这边有个问题, 为什么没有抛出ClassCastException。
                V ambiguity = (V) new Ambiguity("存在的shortName");
                super.put(shortName, ambiguity);
            } else {
                super.put(shortName, value);
            }
        }

        return super.put(key, value);
    }

    @Override
    public V get(Object key) {
        V value = super.get(key);
        if (value == null) {
            throw new RuntimeException("keyName = " + key + ", 没有获取到value.");
        }
        if (value instanceof Ambiguity) {
            throw new RuntimeException("重复的shortName");
        }
        return value;
    }

    static class Ambiguity {
        private String name;

        public Ambiguity(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }
    }
}

ps : Aucune erreur n'a été signalée lors de l'exécution.

欧阳克欧阳克2661 Il y a quelques jours822

répondre à tous(2)je répondrai

  • 大家讲道理

    大家讲道理2017-06-12 09:25:55

    L'effacement de type est Objet, et aucune erreur ne sera signalée lors de la conversion forcée en Objet.

    répondre
    0
  • phpcn_u1582

    phpcn_u15822017-06-12 09:25:55

    Il n'y aura que des avertissements lors de la compilation et aucune erreur ne sera signalée. Le Java Collections Framework regorge en fait de tels transferts forcés.
    Mais une erreur sera signalée lors de l'exécution, si V n'est pas Ambiguity ou sa classe parent.

    répondre
    0
  • Annulerrépondre