日期:2014-05-20  浏览次数:20975 次

问一下反射的优点?
看了很多有关反射的文章,我想问一下有关反射的优点?
在程序中我们可以用关键字new来创造类对象,从而拿到类的属性与方法。反射也是从类里面拿属性与方法。
他们之间有什么区别吗?用关键字new可以做到的事情,为什么要用反射来做呢?

------解决方案--------------------
反射是给工具开发者以及框架的开发者使用的
性能应该比直接创建低一些,而且反射也会破坏封装性。
------解决方案--------------------
很多框架里都是大量使用反射的。
------解决方案--------------------
看了这么多反射的文章还不没了解反射的意图...
反射是提供了一种获取类的有关信息的手段. 创建对象的时候, 如果明确知道是哪个类 然就毫不犹豫new,何必拐弯抹角的。
------解决方案--------------------
学习!
------解决方案--------------------
就我个人的一些理解,有的时候反射省去了很多类似于if的判断,可以很轻松直接的获取你想要得到的类及其属性方法等。
------解决方案--------------------
你 new 一个对象时是明确知道它是什么类,有什么方法.
但如果你根本就不知道它是什么类时就可以用反射,你可以去猜它都有什么方法.
------解决方案--------------------
通常连接数据库我们经常会用到
Class.forName("driver名字");
这个可以理解为反射的机制。
反射的好处就是你可以去尝试访问一些不一定真实存在的类而系统能够编译通过。因为它是运行时才能知道的
但你直接new 一个类是编译期就知道的。
例如你的代码中引用了一个JDK 6特有的接口,但你不知道实际客户的机器上安装的是不是JDK 6,这时你就可以通过反射满足你的需要了。
------解决方案--------------------
探讨
看了这么多反射的文章还不没了解反射的意图...
反射是提供了一种获取类的有关信息的手段. 创建对象的时候, 如果明确知道是哪个类 然就毫不犹豫new,何必拐弯抹角的。

------解决方案--------------------
你可以通过类名获得类里面的属性类型,调用类的方法。我们的数据库连接就使用了反射调用jdbc中实现数据库连接的类
------解决方案--------------------
study
------解决方案--------------------
探讨
通常连接数据库我们经常会用到
Class.forName("driver名字");
这个可以理解为反射的机制。
反射的好处就是你可以去尝试访问一些不一定真实存在的类而系统能够编译通过。因为它是运行时才能知道的
但你直接new 一个类是编译期就知道的。
例如你的代码中引用了一个JDK 6特有的接口,但你不知道实际客户的机器上安装的是不是JDK 6,这时你就可以通过反射满足你的需要了。

------解决方案--------------------
在工厂模型中,大量用到反射
举三个例子:
1、用 hibernate 翻页
如果是 mysql 数据库,调用的函数是 select * from table limit 10,21
oracle 是用子查询 

那么 hibernate 可以通过配置文件,来判断是调用哪一个语句,
也就是通过反射,调用具体的实现类(多态)

2、动物的移动方式
猫用脚走,鸟用翅膀飞

我们只需要在配置文件里指定具体的名称(猫或鸟),就能得到该动物是如何移动的

3、某个游戏发布资料篇,需要增加古典风格的建筑
那就只需要修改配置文件,并且加上实现某接口的实现类,就能达到目标
而不用全部修改

------解决方案--------------------
简单来说一句话:动态产生类的实例!
------解决方案--------------------
new 是编写程序的时候你知道要加载那个类.
反射 就是你当时不知道要加载什么类.


------解决方案--------------------
反射也会破坏封装性,
一切封装好了的对象在反射面前会显的无能为力.......
------解决方案--------------------
动态获得类的信息,及加载类的实例