2010-02-18 54 views
6

Digamos que supongo que tengo el siguiente código de Java.¿Cómo identificar una clase y una interfaz en el código de Java?

public class Example { 
     public static void main(String[] args){ 
      Person person = new Employee(); 
     } 
    } 

Cómo averiguar si la persona es una clase o una interfaz?

Porque la clase Employee puede ampliarla si se trata de una clase, o implementarla si se trata de una interfaz.

Y en ambos casos Person person = new Employee(); es válido.

+0

¿por qué lo necesita en tiempo de ejecución? – Bozho

+1

Me gustaría simplemente 'Ctrl + Click' la' Persona' en mi IDE :) Además, entiendo la pregunta, pero realmente no veo el valor de saber la respuesta ... ¿Qué le gustaría hacer con esta información ? – BalusC

+0

Saber si se trata de una clase o interfaz es inútil. – GuruKulki

Respuesta

9

Si aún no sabe si Person es una interfaz o una clase por naturaleza de la documentación para la clase/interfaz en sí (¿lo está utilizando, presumiblemente tiene algunos documentos o algo así?), Puede decir con el código:

if (Person.class.isInterface()) { 
    // It's an interface 
} 

detalles here.

Editar: Basado en su comentario, aquí está una utilidad fuera de la manga que puede utilizar:

public class CheckThingy 
{ 
    public static final void main(String[] params) 
    { 
     String name; 
     Class c; 

     if (params.length < 1) 
     { 
      System.out.println("Please give a class/interface name"); 
      System.exit(1); 
     } 
     name = params[0]; 
     try 
     { 
      c = Class.forName(name); 
      System.out.println(name + " is " + (c.isInterface() ? "an interface." : "a class.")); 
     } 
     catch (ClassNotFoundException e) 
     { 
      System.out.println(name + " not found in the classpath."); 
     } 
     System.exit(0); 
    } 
} 

Uso:

java CheckThingy Person 
+0

Gracias Crowder. Pero tengo Clases que está escrita por otra persona, y las estoy revisando, así que cuando se escribe este tipo de código, me confundo si el tipo declarado es una Clase o Interfaz. – GuruKulki

+0

Lo siento. Pedo cerebral. Se eliminó el voto negativo y comencé a comentar tan pronto como me di cuenta. –

+0

@gurukulki: Fair 'nuff, puede usar lo anterior para crear una utilidad para resolverlo. No se puede decir simplemente mirando. –

2

Usted puede utilizar el método de la ClassisInterface() clase para hacer esto. ¿Cuál es tu razón para hacer esto? ¿Tiene una biblioteca mal documentada donde necesita resolver esto? Quizás si supiéramos lo que intenta hacer, se podría ofrecer una solución más elegante.

if(Class.forName("Person").isInterface()) 
    //do interface stuff 
else 
    //do class stuff 

o

if(Person.class.isInterface()) 
    ... 

EDIT: Al leer su comentario a T. J. La respuesta de Crowder. Esto es lo que haría:

if(Person.class.isInterface()) 
    System.out.println("Person is an Interface"); 
else 
    System.out.println("Person is a class"); 
5

creo que en este caso, no se sabe porque no debe saber. Si está escribiendo algo que amplía o implementa (la clase Empleado), depende de usted consultar los documentos o el código fuente.

Si, como en su ejemplo, solo está utilizando algunas clases/interfaces, no debería necesitar saber o importar si la clase Persona es concreta o abstracta, o una interfaz, siempre que tenga una definición bien definida API.

2

Simplemente haga Ctrl + haga clic izquierdo en Person en su IDE y/o lea su fuente y/o el javadoc.

Si no está utilizando un IDE aún, puedo recomendar Eclipse o . Si está utilizando Java EE (JSP/Servlet y ese tipo de cosas), tome Eclipse para Java EE o pague IDEA Ultimate edition.

Cuestiones relacionadas