我今天与同事讨论了使用Java运算符的使用是否instanceof
是一种反思。讨论很快演变成实际定义反射的内容。
那么,反射的定义是什么?
并instanceof
认为使用了“使用反射”吗?
另外,如果instanceof
将其视为反射,那么多态性还不是“利用反射”吗?如果没有,有什么区别?
return
是“结构编程”吗?
我今天与同事讨论了使用Java运算符的使用是否instanceof
是一种反思。讨论很快演变成实际定义反射的内容。
那么,反射的定义是什么?
并instanceof
认为使用了“使用反射”吗?
另外,如果instanceof
将其视为反射,那么多态性还不是“利用反射”吗?如果没有,有什么区别?
return
是“结构编程”吗?
Answers:
根据维基百科,这是反射的定义:
在计算机科学中,反射是计算机程序可以观察(进行类型自省)并在运行时修改其自身的结构和行为的过程。
我自己不能说得更好,并强调了您问题的重要部分。就是说,instanceof
可以考虑使用反射。该程序观察其结构并进行类型自省。
if (true)
看值,而不看类型。这就是为什么它不被认为是反思。
为了清楚起见,我将考虑两个答案。
从理论上讲,instanceof
是反射的一种形式,如Falcon的回答所述。
在计算机科学中,反射是计算机程序可以观察(进行类型自省)并在运行时修改其自身的结构和行为的过程。
但是,实际上,当程序员谈论使用反射时,他通常指的不仅仅是检查变量是否属于某种类型。这是一个非常基本的概念,没有它,多态是不可能的。
请注意,instanceof
经常使用表示代码有气味,通常可以使用适当的多态来代替。
在以下文章中,您可能会很有趣:http : //java.sun.com/developer/technicalArticles/ALT/Reflection/
本文的关键是一个代码段,它们使用Java的反射功能的一部分“类”类的“ isInstance”方法来模拟“ instanceof”关键字。
由于其他答案,Wikipedia中的定义已更改(我碰巧同意这一更改,但我不是这样做的人)以删除括号中的部分:
在计算机科学中,反射是计算机程序在运行时检查,自省和修改其自身的结构和行为的能力。
https://en.wikipedia.org/wiki/Type_introspection也专门说
内省不应与反思相混淆
我不会考虑instanceof
到属于第一种定义下:程序检查一个值,而不是它自己的结构,它不涉及表示节目结构(在Java中:任何值java.lang.Class
,java.reflect.Method
等); 反思的标志就是运用这样的价值观。
是的,“ instanceof”运算符是一种反射形式。先前的答案告诉您原因。
如今,“反射”或“对象/类的自省”是一种炒作,但是从某种程度上讲,几种编程语言已经使用了这种概念。
DOT NET(Java克隆)使用的(很多)。
instanceof
是反射的示例。当然,它介于通过getClass()
&朋友使用常规数据和使用元数据之间,但您可以通过一些方式使用可行的定义。