2012-04-15 24 views
88

¿Cómo comprobar si alguna clase implementa la interfaz? Al tener :¿Cómo comprobar si un objeto implementa una interfaz?

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

cómo comprobar si gor implementa Monster interfaz?

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"; 
     } 
    } 
} 

es el método getLevel() anulados a Gorgon correctamente, por lo que puede volver level de nuevo gor creado?

+0

Creo que se necesita la palabra clave instanceof. –

Respuesta

165

Para un ejemplo

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

A continuación, realice

gor instanceof Monster 

Para una instancia de clase hacer

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

¿Qué tal el parámetro de método 'public void doSomething ([Object implementa Serializable] param)'? ¿Cuál es la sintaxis correcta para eso? –

+0

Yeh, '... isAssignableFrom()', la única forma de determinar una Gorgonita es un monstruo. –

31

Uso

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

Si desea un método como public void doSomething([Object implements Serializable]), puede escribirlo así public void doSomething(Serializable serializableObject). Ahora puede pasar cualquier objeto que implemente Serializable, pero con el serializableObject solo tiene acceso a los métodos implementados en el objeto desde la interfaz Serializable.

7

En general, para AnInterface y anInstance de cualquier clase:

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