Hoje tive uma discussão com um colega de trabalho, se o uso do operador Java instanceof
é um tipo de reflexão. E a discussão evoluiu rapidamente para o que realmente define reflexão.
Então, qual é a definição de reflexão?
E o uso do instanceof
"uso da reflexão" é considerado?
Além disso, se instanceof
for considerado reflexão, o polimorfismo também não está "usando reflexão"? Se não, qual é a diferença?
java
language-agnostic
language-features
reflection
Bjarke Freund-Hansen
fonte
fonte
instanceof
é um exemplo de reflexão. Certamente está entre o uso normal de dados e o uso de metadados através dogetClass()
& friends, mas você pode ter definições viáveis de alguma maneira.return
"programação estrutural" é considerado?Respostas:
Esta é a definição de reflexão de acordo com a wikipedia:
Eu não poderia ter dito melhor e destacou a parte importante da sua pergunta. Dito isto, sim,
instanceof
é considerado usando reflexão. O programa observa sua estrutura e conduz a introspecção de tipos .fonte
if (true)
olha para um valor , não para um tipo . É por isso que não é considerado reflexão.Por uma questão de clareza, consideraria duas respostas.
Teoricamente ,
instanceof
é uma forma de reflexão, conforme explicado na resposta de Falcon .No entanto, praticamente , quando um programador fala sobre o uso da reflexão, ele geralmente se refere a muito mais do que apenas verificar se uma variável é de um determinado tipo. Esse é um conceito tão rudimentar, sem o qual o polimorfismo não seria possível .
Observe que o uso
instanceof
muitas vezes indica um cheiro de código e o polimorfismo adequado pode ser usado com frequência.fonte
Você pode ser interessante no seguinte artigo: http://java.sun.com/developer/technicalArticles/ALT/Reflection/
A chave neste artigo é um trecho de código em que eles simulam a palavra-chave "instanceof" usando o método "isInstance" da classe "Class", que faz parte do recurso de reflexão do Java.
fonte
Desde as outras respostas, a definição na Wikipedia foi alterada (por acaso concordo com essa alteração, mas não fui eu quem fez isso) para remover a parte entre parênteses:
https://en.wikipedia.org/wiki/Type_introspection também diz especificamente
Eu não consideraria
instanceof
a cair sob a primeira definição: o programa examina um valor, não a sua própria estrutura, e não envolve quaisquer valores que representam a estrutura do programa (em Java:java.lang.Class
,java.reflect.Method
, etc.); a marca da reflexão está trabalhando com esses valores.fonte
SIM, o operador "instanceof" é uma forma de reflexão. As respostas anteriores mostram o porquê.
"Reflexão" ou "introspecção de objeto / classe" é um hype hoje em dia, mas várias linguagens de programação usam parte desse conceito, há algum tempo.
DOT NET (clone de Java), (mis) usa muito.
fonte