[JAVA] Ne perdez pas à l'avertissement non vérifié! → Après tout, je n'ai pas pu gagner l'avertissement non vérifié ...

Quand j'essaye de lancer en Java et d'écrire ce qui suit, j'obtiens un avertissement non vérifié.

Object obj = new SomeClass();
SomeClass some = (SomeClass)obj;

Pour éviter cela, utilisez la méthode cast dans la classe Class.

Object obj = new SomeClass();
SomeClass some = SomeClass.class.cast(obj);

Il semble que cela devrait être fait comme ça.

Alors que se passe-t-il dans le cas suivant?

Object obj1 = new Hoge<Fuga>();
Hoge<Fuga> some1 = (Hoge<Fuga>)obj1;

Object obj2 = new Hoge<Piyo>(); //Piyo est une sous-classe de Fuga
Hoge<? extends Fuga> some2 = (Hoge<? extends Fuga>)obj2;

Object obj3 = new Hoge<Moge>(); //Moge est la super classe de Fuga
Hoge<? super Fuga> some3 = (Hoge<? super Fuga>)obj3;

En conclusion, il semble que l'avertissement non vérifié ne peut être évité pour les moulages utilisant des génériques. Dans le cas de Java, le type spécifié par le générique est supprimé au moment de la compilation, il semble donc qu'il n'est pas possible de le juger correctement et de le convertir. Même avec Stackoverflow "Que dois-je faire?" "Je ne peux pas. Abandonnez et utilisez @ SuppressWarnings" Est en cours d'échange.

En passant, l'implémentation de la méthode cast de la classe Class mentionnée ci-dessus est comme ça.

    @SuppressWarnings("unchecked")
    public T cast(Object obj) {
        if (obj != null && !isInstance(obj))
            throw new ClassCastException(cannotCastMsg(obj));
        return (T) obj;
    }

Après tout, vous utilisez @SuppressWarnings (" non coché ") (colère)

Donc, il semble que vous deviez ajouter @SuppressWarnings (" non coché ") tranquillement, ou créer votre propre méthode de cast juste pour éviter les avertissements comme la méthode cast de la classe Class.

Recommended Posts

Ne perdez pas à l'avertissement non vérifié! → Après tout, je n'ai pas pu gagner l'avertissement non vérifié ...
Après tout, je voulais prévisualiser le contenu de mysql avec Docker ...
Je veux tronquer après la virgule décimale
[Rails] Je ne sais pas comment utiliser le modèle ...
Je ne trouve pas l'image du docker après la mise à jour vers Docker Desktop 2.4.0.0
Qu'est-il arrivé aux modifications typiques d'Apache Wicket 8?
J'ai essayé d'expliquer la méthode
J'étais accro au scrollview car je ne pouvais pas appuyer sur la taille variable UIView