论坛首页 Java企业应用论坛

反射 与 自省

浏览 8508 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (9)
作者 正文
   发表时间:2009-06-14   最后修改:2009-06-19
OO

反射 与 自省 都是用来判断一个语言是否是动态语言 的标准

他们有区别吗?我感觉都一样。

 

下面是 它们 的定义(计算机编程中

反射(reflection)

可以在运行时获得对象的类型信息。 比如对于一个JAVA对象,它的类型信息包括

1,这个对象的所属的类(class)

2,这个类 的 构造器(constructor)

2,这个类 中 声明的方法(method)

3,这个类 中 声明的属性(field)

4,这个类 中 声明的注解(annotation)

5,这个类 的 父类(superclass)

6,这个类 实现的 接口(interface)

自省( introspection

检查某些事物以确定它是什么、它知道什么以及它能做什么。

 

对象 的 类型信息 就是描述 这个对象 是什么,知道什么,以及能做什么。

我感觉 反射 与 自省 其实是一回事, 只是在JAVA中把自省说成反射,在PYTHON中把反射说成自省。

不知道为什么一种事物会有两种说法。。。

 

附件里有一个关于java反射的教程(翻译自SUN官方教程),

分享一下。。。

 

   发表时间:2009-07-16  
java中只听说过反射
自省和反射应该是一回事吧

0 请登录后投票
   发表时间:2009-07-16  
whatwhat 写道
java中只听说过反射
自省和反射应该是一回事吧


我感觉是一回事
希望有人能指出它们的不同
0 请登录后投票
   发表时间:2009-07-17  
自省就是内省,内省在反射包里,是利用反射实现的,内省可以算是对反射的扩充,二者不是一个概念。

内省主要说的,一个类该做哪些事情由这个类本身就决定了,而非外部调用者。

比如一个类只有get和set方法,那么明显这个类的主要任务就是封装数据,则把这个类传入对应内省构造器中,无须你在挨个set。

或者一个负责计算某些值,那你可以要求这个类所有计算方法必须以“compute”开头,则将这个类自动运行而无需关心该计算哪些。
0 请登录后投票
   发表时间:2009-07-17  
unsid 写道
自省就是内省,内省在反射包里,是利用反射实现的,内省可以算是对反射的扩充,二者不是一个概念。

内省主要说的,一个类该做哪些事情由这个类本身就决定了,而非外部调用者。

比如一个类只有get和set方法,那么明显这个类的主要任务就是封装数据,则把这个类传入对应内省构造器中,无须你在挨个set。

或者一个负责计算某些值,那你可以要求这个类所有计算方法必须以“compute”开头,则将这个类自动运行而无需关心该计算哪些。

 

“内省可以算是对反射的扩充”,

请问扩充在哪里?

 

“内省主要说的,一个类该做哪些事情由这个类本身就决定了,而非外部调用者。”

这也是通过反射实现的吧。。


你举的的两个例子很具体,但也都是通过反射实现的。

 

0 请登录后投票
   发表时间:2009-07-17  
内省本来就是对反射的再次包装,它比反射具体一些,反射能用在内省里,也可以不用再内省里。这和面粉与面包的关系差不多。
0 请登录后投票
   发表时间:2009-07-17   最后修改:2009-07-17
unsid 写道
内省本来就是对反射的再次包装,它比反射具体一些,反射能用在内省里,也可以不用再内省里。这和面粉与面包的关系差不多。



能否给出java自省的官方定义

 

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics