L'operatore instanceof Java considera la riflessione e cosa definisce la riflessione?

24

Oggi ho avuto una discussione con un collega, sia che l'utilizzo dell'operatore Java instanceof sia un tipo di riflessione. E la discussione si è rapidamente evoluta in ciò che effettivamente definisce la riflessione.

Quindi, qual è la definizione di riflessione?

E l'utilizzo di instanceof è considerato "utilizzando la riflessione"?

Inoltre, se instanceof è considerato riflesso, allora il polimorfismo non è anche "usando la riflessione"? In caso contrario, qual è la differenza?

    
posta Bjarke Freund-Hansen 07.09.2011 - 09:23
fonte

5 risposte

22

Questo è la definizione di riflessione secondo wikipedia:

In computer science, reflection is the process by which a computer program can observe (do type introspection) and modify its own structure and behavior at runtime.

Non avrei potuto dirlo meglio e ho evidenziato la parte importante della tua domanda. Detto questo, sì, instanceof è considerato utilizzando la riflessione. Il programma osserva la sua struttura e conduce tipo introspection .

    
risposta data 07.09.2011 - 09:38
fonte
13

Per motivi di chiarezza, prenderei in considerazione due risposte.

Teoricamente , instanceof è una forma di riflessione, come spiegato in La risposta di Falcon .

In computer science, reflection is the process by which a computer program can observe (do type introspection) and modify its own structure and behavior at runtime.

Tuttavia, in pratica , quando un programmatore parla dell'utilizzo della riflessione, di solito si riferisce a molto più che semplicemente controllando se una variabile è di un certo tipo. Questo è un concetto così rudimentale, senza il quale il polimorfismo non sarebbe possibile .

Ricorda che l'utilizzo di instanceof spesso indica un odore di codice e spesso è possibile utilizzare il polimorfismo appropriato.

    
risposta data 07.09.2011 - 10:17
fonte
2

Potresti essere interessante nel seguente articolo: link

La chiave in questo articolo è uno snippet di codice in cui simula la parola chiave "instanceof" utilizzando il metodo "isInstance" della classe "Class", che fa parte della funzione reflection di Java.

    
risposta data 07.09.2011 - 09:43
fonte
2

Poiché le altre risposte, la definizione in Wikipedia è stata modificata (sono d'accordo con questo cambiamento, ma non ero io a farlo) per rimuovere la parte tra parentesi:

In computer science, reflection is the ability of a computer program to examine, introspect, and modify its own structure and behavior at runtime.

Anche il link dice specificamente

Introspection should not be confused with reflection

Non prenderei in considerazione instanceof per rientrare nella prima definizione: il programma esamina un valore, non la sua stessa struttura, e non implica alcun valore che rappresenti la struttura del programma (in Java: java.lang.Class , java.reflect.Method , eccetera.); il segno distintivo della riflessione sta funzionando con tali valori.

    
risposta data 14.09.2016 - 16:54
fonte
-5

SÌ, l'operatore "instanceof" è una forma di riflessione. Le risposte precedenti ti dicono perché.

"Reflection" o "object / class introspection" è un hype in questi giorni, ma diversi linguaggi di programmazione hanno utilizzato parte di questo concetto, da qualche tempo.

DOT NET (clone Java), (mis) usa molto.

    
risposta data 07.09.2011 - 17:57
fonte

Leggi altre domande sui tag