快速业务通道

反射实践 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
---");    if (constructors.length > 0) {     System.out.println();     System.out.println("Constructors:");     for (Constructor<?> constructor : constructors) {      System.out.println(constructor);     }    }    if (fields.length > 0) {     System.out.println();     System.out.println("Fields:");     for (Field field : fields) {      System.out.println(field);     }    }    if (methods.length > 0) {     System.out.println();     System.out.println("Methods:");     for (Method method : methods) {      System.out.println(method);     }    }   } }

反射实践(3)

时间:2011-08-09 Albert Attard

Java 包含一组与反射有关的类,这些类被打包在反射 API 下。类 Constructor、 Field 和 Method 就是属于这个程序包的其中一些类。如同众所周知的 Class 类一样, Java 使用这些类将我们所编写的 程序演示为对象。为了描述对象,我们需要知道它的组成。我们从哪里开始呢?那就从这个类开始吧,因 为它包含了我们的所有代码。

Class<?> clazz = object.getClass();

注意到这里的泛型声明 Class<?>。泛型,简单地说,就是通过确保给出的实例是某种指定的类 型提供类型安全的操作。我们的方法 (describeInstance(Object)) 并未绑定到某个特定的类型,而是设 计为与任何给定的对象共同工作。因此,使用无限制的通配符 <?>。

Class 类有很多方法。我们将重点介绍与我们有关的方法。在下面的代码片段中列出了这些方法。

Constructor<?>[] constructors = clazz.getDeclaredConstructors(); Field[] fields = clazz.getDeclaredFields(); Method[] methods = clazz.getDeclaredMethods();

上面的 Class 方法返回了一组组成该对象构造函数、字段以及方法。

请注意,Class 类包含两组 getter 方法:一组在其名称中包含 declared 单词,而另一组则不包含 这个单词。不同之处在于, getDeclaredMethods() 将返回属于这个类的所有方法,而 getMethods() 只 返回 public 方法。理解只返回在这个类中声明的方法,这一点非常重要。继承的方法是不会被检索到的 。

理解 ReflectionUtil 类没有对 Product 类的引用,这一点也非常重要。我们需要另一个创建产品详 细信息类的实例并打印其详细信息的类。

package ria; public class Main {   public static void main(String[] args) throws Exception {    Product product = new Product();    product.setId(300);    product.setName("My Java Product Name");    product.setDescription("My Java Product description...");    product.setPrice(10.10);    ReflectionUtil.describeInstance(product);   } }

上面的这个类应该产生以下输出(或者类似于以下内容的输出):

Description for class: ria.Product Summary ----------------------------------------- Constructors: 1 Fields:    4 Methods:   8 Details ----------------------------------------- Constructors: public ria.Product() Fields: private java.lang.String ria.Product.description private long ria.Product.id private java.lang.String ria.Product.name private double ria.Product.price Methods: public java.lang.String ria.Product.getName() public long ria.Product.getId() public void ria.Product.setName(java.lang.String) public void ria.Product.se

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号