A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄克帅 中级黑马   /  2012-6-19 13:13  /  2833 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄克帅 于 2012-6-21 11:45 编辑

大家帮忙看下下面的代码 我想判断下获得的属性类型是不是某个类型   用 instanceof 的有些问题      谁能详细说一下instanceof 的具体用法
MyJavabean bean = new MyJavabean();

BeanInfo bi = Introspector.getBeanInfo(bean.getClass());

PropertyDescriptor[] pds = bi.getPropertyDescriptors();

for (PropertyDescriptor pdsi : pds) {
        
        if (pdsi.getWriteMethod() != null) {
               
                if (pdsi.getPropertyType() instanceof Object){//这里的类型除了写Object  写其他的类型都报错  为什么?  
                        pdsi.getWriteMethod().invoke(bean, "novalue");
                }
        }
}

6 个回复

倒序浏览
本帖最后由 郑传庆 于 2012-6-19 14:08 编辑

instanceof是用来判断某个对象是那中类型的。(pdsi.getPropertyType() instanceof  Class<?>)这一句话是说pdsi.getPropertyType()得到的对象是否属于Object类型的。为什么写其它类型会报错?看下面的解析
/*
   *  getPropertyType()方法返回的是一个 Class<?>集合,而Object是Class<?>的超类。所以写Object就没报错
  *   你也可以写成 Class<?>也同样没报错。而你写的类超出来这个范围就会报错。也就是说,你写的类不属于Class<?>范围
   *  编译器就不会给你通过。楼主查看一下API文档PropertyDescriptor里面的getPropertyType()方法就知道怎么回事了
   */
if (pdsi.getPropertyType() instanceof  Object){
          pdsi.getWriteMethod().invoke(bean, "novalue");
}
回复 使用道具 举报
instanceOf应该是用来判断一个实例对象是否属于某个类,而getPropertyType()返回的是一个class类,你不能用instanceO判断一个类是否属于另一个类,Object不报错是因为任何类都是Object的实例对象。
回复 使用道具 举报
这好像是反射的内容吧、我还没有学习这儿来呢、不过原理应该是这样的;
你查下API pdsi.getPropertyType() 这个返回值类型在没有泛型的情况下返回的是一个Object类;当然后面的instanceof 除了Object以外都会报错了;因为Object是“上帝”嘛;哈哈;
我猜你的方法是写反了吧;if(你想要的类型.instanceof(getPropertyType() ); 这样写才是你判断迭代出的类型是不是你下面将要处理的类型;
回复 使用道具 举报
instancof的作用是在强制类型转换之前,判断是否可以转换成功。
它的前一个操作数通常是一个引用类型,后一个操作数通常是一个类。
前面的对象需要时后面的类或子类或实现类的实例。
这句代码可以编译通过时因为object是所有类的父类,所以返回true
回复 使用道具 举报
instanceof运算符用法
运算符是双目运算符,左面的操作元是一个对象,右面是一个类.当
左面的对象是右面的类创建的对象时,该运算符运算的结果是true,否则是false
说明:(1)一个类的实例包括本身的实例,以及所有直接或间接子类的实例
(2)instanceof左边操作元显式声明的类型与右边操作元必须是同种类或有继承关系,
即位于继承树的同一个分支上,否则会编译出错,千万留意哟!
回复 使用道具 举报
      instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
用法:
result = object instanceof class
参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。

例如:
var a=new Array();alert(a instanceof Array);会返回true,
同时alert(a instanceof Object)也会返回true;这是因为Array是object的子类。
如:function test(){};var a=new test();alert(a instanceof test)会返回true
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马