2010-02-18 8 views
6

Supponiamo di avere il seguente codice Java.Come identificare una classe e un'interfaccia nel codice Java?

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

Come scoprire se la Persona è una classe o un'interfaccia?

Perché la classe può estenderla se si tratta di una classe o implementarla se si tratta di un'interfaccia.

E in entrambi i casi Persona persona = nuovo Impiegato(); è valido.

+0

perché ne hai bisogno in fase di runtime? – Bozho

+1

Vorrei semplicemente 'Ctrl + Click' la' Persona' nel mio IDE :) Inoltre, capisco la domanda, ma davvero non vedo alcun valore di conoscere la risposta ... Cosa ti piacerebbe fare con questa informazione ? – BalusC

+0

Sapere se si tratta di una Classe o di un'interfaccia è inutile che intendi dire. – GuruKulki

risposta

9

Se non sai già se Person è un'interfaccia o una classe per natura della documentazione per la classe/l'interfaccia stessa (la stai usando, presumibilmente hai qualche documento o qualcosa del genere?), Puoi dire con il codice:

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

Dettagli here.

Edit: In base al commento, ecco un programma di utilità off-the-bracciale è possibile utilizzare:

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

Usage:

java CheckThingy Person 
+0

Grazie Crowder. Ma ho Classi che sono scritte da qualcun altro, e le sto esaminando, quindi quando questo tipo di codice è scritto, mi confondo se il tipo dichiarato è una Classe o Interfaccia. – GuruKulki

+0

Mi dispiace per quello. Lapsus. Rimosso il downvote e commentare non appena ho capito. –

+0

@gurukulki: Fair 'nuff, puoi usare quanto sopra per creare un'utilità per capirlo. Non puoi dirlo solo guardando. –

2

È possibile utilizzare il metodo del ClassisInterface() classe per fare questo. Qual è la tua ragione per fare questo però? Hai una biblioteca scarsamente documentata in cui devi capirlo? Forse se sapessimo cosa stavi tentando di fare, potrebbe essere offerta una soluzione più elegante.

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

o

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

EDIT: Dopo aver letto il tuo commento e T.J. La risposta di Crowder. Questo è quello che vorrei fare:

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

Penso che in questo caso, non si sa perché non si dovrebbe sapere. Se stai scrivendo qualcosa che si estende o implementa (la classe Employee), spetta a te dare un'occhiata ai documenti o al codice sorgente.

Se, come nel tuo esempio, stai solo utilizzando alcune classi/interfacce, non dovresti aver bisogno di sapere o preoccuparti se la classe Person è concreta o astratta, o un'interfaccia, purché abbia una definizione ben definita API.

2

Basta fare Ctrl + tasto sinistro su Person nel tuo IDE e/o leggere la sua fonte e/o il javadoc.

Se non si utilizza ancora un IDE, posso consigliare Eclipse o IntelliJ IDEA. Se stai facendo Java EE (JSP/Servlet e quel tipo di roba), prendi Eclipse per Java EE o paga per IDEA Ultimate edition.

Problemi correlati