wcz_1985 2008-11-09 00:00
浏览 172
已采纳

关于反射的问题

JAVA的反射机制。
最近看了一下一些发行的库,比如objot等是说运行是没有反射。实现了ioc与aop,不再有反射。是什么原理哦?比如我要动态地调用某个类的某个方法,就只有方法名与类名,参数列表类型,不使用反射能完成吗?

关于反射,我真被搞晕了,什么时候才算是反射呢?
比如
Class A {
int field;
void method();
}

在操作A类时。
A a = new A();
//或者这里发生反射了吗? Class<?> c = a.getClass();
Class<?> c = A.class; //这里发生反射的操作了吗?
Method m = c.getDeclaredMethod("method",new Class[]{}); //这里应该发生了反射吧?
m.invoke(a); //这里还算是反射吗?

我有一个Method对象时,调用method的invoke方法还算是反射吗?
能详细说说这个吗?我老觉得我一用反射来做东西,就联想到它的性能比较差。想找代替品,又找不到更灵活的。唉。。

  • 写回答

6条回答 默认 最新

  • 「已注销」 2008-11-09 07:05
    关注

    [code="java"]A a = new A();
    Class<?> c = a.getClass(); [/code]
    //getClass是Object的方法,返回此 Object 的运行时类。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。
    实际结果类型是 Class<? extends |X|>,其中 |X| 表示清除表达式中的静态类型,该表达式调用 getClass。 例如,以下代码片段中不需要强制转换:

    Number n = 0;
    Class<? extends Number> c = n.getClass();
    一直都有的东西,谈不上叫反射

    Class<?> c = A.class;
    //这个也不算吧。。

    [code="java"]Method m = c.getDeclaredMethod("method",new Class[]{});
    m.invoke(a); [/code]

    reflect的东西,在java.lang.reflect包里边,是这么描述的
    [quote]提供类和接口,以获得关于类和对象的反射信息。在安全限制内,反射允许编程访问关于加载类的字段、方法和构造方法的信息,并允许使用反射字段、方法和构造方法对其底层对等项进行操作。

    如果必需的 ReflectPermission 可用,则 AccessibleObject 允许抑制访问检查。

    Array 提供动态创建和访问数组的静态方法。

    此包中的类以及 java.lang.Class 可以适应以下应用程序的需要:调试程序、解释程序、对象检查程序、类浏览程序,以及服务(比如,Object Serialization 和 JavaBean,它们需要访问目标对象(基于其运行时类)的公共成员或给定类声明的成员)。
    [/quote]

    可以参考api文档,更多技巧参考java reflection in action 这本书
    反射的性能没有那么恐怖,像beanutils之类,strut1也是用了很多。
    再看看那些动态语言,ruby python,n多这些东西,而且也比java慢n多。。
    不过robbin他们还不是用得不亦乐呼。。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序