136 votes

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

Comment vérifier si une classe implémente une interface ? Lorsque l'on a :

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

comment vérifier si gor met en œuvre Monster l'interface ?

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 est-elle getLevel() remplacée dans Gorgon correctement, afin qu'il puisse renvoyer level de nouvelles gor créé ?

0 votes

Je pense que vous avez besoin du mot-clé instanceof.

230voto

Mike Q Points 9660

Pour une instance

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

Ensuite, faites

gor instanceof Monster

Pour une instance de classe

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

0 votes

Qu'en est-il du paramètre de méthode public void doSomething([Object implements Serializable] param) ? Quelle est la bonne syntaxe pour cela ?

1 votes

Oui, ...isAssignableFrom() Le seul moyen de déterminer si une Gorgonite est un monstre.

43voto

krock Points 13537

Utilisation

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

30voto

Oleg Mikhailov Points 1885

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

AnInterface.class.isAssignableFrom(anInstance.getClass());

1voto

BananyaDev Points 83

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X