何时使用java.lang.reflect包

时间:2013-06-04 15:48:14

标签: java reflection

这可能是一个简单的问题,

我没有机会使用java.lang.reflect包及其相关类。 但我知道Java编译器使用反射来获取类信息。

我的问题是为什么编译器本身使用了Java时反射包?任何人都可以了解我们使用的情况反映包裹吗?

4 个答案:

答案 0 :(得分:4)

简而言之,无论何时想要对类进行内省并确定其结构,都可以按名称(String)等方式调用方法。

很多框架都会使用它。

e.g。如果你在Spring配置(XML)文件中指定属性,它将获取该字符串(例如“position”),派生一个方法名称(例如“setPosition”),然后调用它。请注意,在这种情况下,您已从字符串开始,并在运行时中派生/调用该方法。编译器根本没有参与。

答案 1 :(得分:1)

哇有趣 - 我刚刚在"Core Java 2"(Horstmann,第5章 - 继承)中读过这篇文章:

  

反射库为您提供了一个非常丰富和精细的工具集   编写动态操作Java代码的程序。 ......很重   在JavaBeans中使用,Java的组件体系结构。使用   反思,Java可以支持像用户那样的工具   Visual Basic已经习以为常。

总的来说,这是一个相当强大的功能。请参阅API page

了解更多信息

答案 2 :(得分:1)

你可以使用元编程与该功能,非常强大,也很昂贵,没有提到它的困难。但有些情况下该功能会有很大的帮助。

http://en.wikipedia.org/wiki/Metaprogramming

答案 3 :(得分:0)

在过去,我们会编写一个这样的程序:

  • 编写/修改类,方法等
  • 编译
  • 运行它

但现在有了反思:

  • 编写/修改类,方法等

    • 编译
    • 运行它
    • 即使在编译并运行后也要修改类!

    如果您有兴趣,请尝试我提供的链接作为来源 下面。希望这个

    帮助和好问题。

来源University of Washington