web-dev-qa-db-fra.com

Comment vérifier si un objet implémente une interface?

Comment vérifier si une classe implémente une interface? Quand avoir:

Character.Gorgon gor = new Character.Gorgon();

comment vérifier si gor implémente l'interface Monster?

public interface Monster {

    public int getLevel();

    public int level = 1;
}

public class Character {
    public static class Gorgon extends Character implements Monster {
        public int level;
        @Override
        public int getLevel() { return level; }

        public Gorgon() {
            type = "Gorgon";
        }
    }
}

La méthode getLevel() est-elle surchargée dans Gorgon de manière à pouvoir renvoyer level du nouveau gor créée?

112
J.Olufsen

Par exemple

Character.Gorgon gor = new Character.Gorgon();

Alors fais

gor instanceof Monster

Pour une instance de classe, faites

Class<?> clazz = Character.Gorgon.class;
Monster.class.isAssignableFrom(clazz);
205
Mike Q

Utilisation

if (gor instanceof Monster) {
    //...
}
39
krock

En général pour AnInterface et anInstance de toute classe:

AnInterface.class.isAssignableFrom(anInstance.getClass());
14
Oleg Mikhailov

Si vous voulez une méthode comme public void doSomething([Object implements Serializable]), vous pouvez simplement la saisir comme ceci public void doSomething(Serializable serializableObject). Vous pouvez maintenant lui transmettre n'importe quel objet implémentant Serializable, mais en utilisant serializableObject, vous avez uniquement accès aux méthodes implémentées dans l'objet à partir de l'interface Serializable.

1
BananyaDev