0 0

关于BeanInfo的一个问题5

[code="java"][/code] import java.beans.BeanInfo;

import java.beans.IntrospectionException;

import java.beans.Introspector;

import java.beans.PropertyDescriptor;

       public class BeanInfoTest {

                 public int getA(){

                          return 1;

                }

                 public static void main(String[] args) {

                         try {

                                     BeanInfo bi =Introspector.getBeanInfo(BeanInfoTest.class, Object.class);

                                     PropertyDescriptor pd[] = bi.getPropertyDescriptors();

                                    for(PropertyDescriptor prodes:pd){

                                              System.out.println(prodes.getName());

                                              System.out.println(prodes.getReadMethod());

                                              System.out.println(prodes.getWriteMethod());

                                     }

                             } catch (IntrospectionException e) {

                                       e.printStackTrace();

                               }

        }

}

 

 

 附件是结果,它竟然帮我找到了property a。

我比较好奇的问题是,我明明没有定义a这个字段的。难道反射的时候都是通过找到getXX setXX方法来判断是不是有这个属性吗?感觉这也太不合适了。还是说这样只是为了让所有权在我们手上,让我们使用规范的bean。提供完整的set get方法和字段?还望知道的人告知一二,

2013年4月17日 16:24
  • 大小: 5 KB

4个答案 按时间排序 按投票排序

0 0

采纳的答案

LZ自己已经说出了正确答案了

2013年4月17日 16:28
1 0

补充下,

Java就是按你所说的,看getter和setter来判别属性。
甚至即使你定义个public的属性,不提供getter和setter,Java反而找不到这个明明可以访问的属性。

我觉得主要原因是Java世界不推荐public属性,推荐用getter和setter来“间接”处理。
而在大多数情况下getter和setter也是相对较好的选择。比如

  1. 属性需要只读或只写。
  2. 需要在getter或setter时做特殊处理,比如返回只读集合时。
  3. 同个属性扮演多个角色。比如日期属性,既有日期的getter和setter,也有(默认)格式化成String的getter和setter。
  4. 虚拟的属性。比如代理模式下,好多属性并不是自己的。或者根本就是一段逻辑处理等。


等等。

后两种情况下,都是无法做出楼主提出的
引用
判断是不是有这个属性


另一方面,getter和setter导致大量的臃肿代码这个问题,虽然讨论很多,目前看来,类似C#等语言那种改进还遥遥无期。

2013年4月17日 18:39
0 0

bean代表一个数据对象,你的测试bean写的就已经不是规范的。
还是说这样只是为了让所有权在我们手上,让我们使用规范的bean。提供完整的set get方法和字段?----这里不一定非要有一对get set方法。可以只有get,但不能只有set,既然用到bean又不符合mvf思想那又有什么意义呢?
yunzhu 已经说得很清楚了,你自己已经说了正确答案

2013年4月17日 17:22
0 0

class A{
   private int a; //这是字段名

   public void setAbc( a) {
       this.a = a;
   }

   public int getAbc() {
     return this.a;
   }

}

abc就是你的属性名  prodes.getName() 拿的是属性名

要区别开字段名 和 属性名

2013年4月17日 16:37

相关推荐

    swingx-beaninfo-1.6.2-2.jar

    swingx-beaninfo-1.6.2-2.jar

    beaninfo-2.0.0-v200705302225.jar

    官方版本,亲测可用

    openbeans1.0.zip

    //import java.beans.BeanInfo; //import java.beans.IntrospectionException;...使用openBeans.jar 方案能解决此问题。import 的包需要改一下。改成import com.googlecode.openbeans.BeanInfo。 解决

    openbeans.rar

    在android studio 中无法使用 BeanInfo,IntrospectionException,Introspector, PropertyDescriptor 这些类,只需要导入这个jar 库就可以了。 只不过,要把java.beans.BeanInfo; 替换为 ...

    beanutils-1.9.3-bin

    对于JavaBean,简单的来说,就是要有一个空参的构造器和对属性的getXXX方法和setXXX方法。 在由JDK提供的默认的API中,有java.beans包,里面有诸如Introspector,BeanInfo,PropertyDescriptor等用来操作JavaBean的...

    Java开发技术大全(500个源代码).

    HelloWorldApp.java 第一个用Java开发的应用程序。 firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载Applet的网页文件 第2章 示例描述:本章介绍开发Java的基础语法知识。 ...

    openbeans(android)

    在andriod平台上发现缺少相关java.beans包。android.jar下本来就没有BeanInfo这个类 需要自己去下载。引入openbean.jar 才能用Bean相关的类

    JBuilder开发人员指南

    一、引言 二、开发数据库应用程序 三、安装与设置用于数据库应用程序的JBuilder 四、理解JBuilder数据库应用程序 ...三七、使一个对话框成为JavaBean 三八、附录A 用JBuilder进行国际化 三九、附录B 使用命令行工具

    JavaBean简介

    JavaBean简介 什么是JavaBean? JavaBean的三个组成部分 JavaBean的基本特征 BeanInfo接口 JavaBean的开发模式 使用JavaBean开发应用程序 EJB简介

    Java核心技术II(第8版)

    8.9.2 一个JavaBean持久化的完整示例 第九章 安全 9.1 类加载器 9.1.1 类加载器的层次结构 9.1.2 将类加载器作为命名空间 9.1.3 编写你自己的类加载器 9.2 字节码校验 9.3 安全管理器与访问权限 9.3.1 Java 平台...

    ThinkInJava

    1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 阶段2:开始构建? 1.12.5 阶段3:正式创建 1.12.6 阶段4:校订 1.12.7 计划的...

    java 编程入门思考

    1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 阶段2:开始构建? 1.12.5 阶段3:正式创建 1.12.6 阶段4:校订 1.12.7 计划的...

    thinkinjava

    1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 阶段2:开始构建? 1.12.5 阶段3:正式创建 1.12.6 阶段4:校订 1.12.7 计划的...

    Thinking in Java简体中文(全)

    1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 阶段2:开始构建? 1.12.5 阶段3:正式创建 1.12.6 阶段4:校订 1.12.7 计划的...

    java联想(中文)

    1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 阶段2:开始构建? 1.12.5 阶段3:正式创建 1.12.6 阶段4:校订 1.12.7 计划的...

    Thinking in Java(中文版 由yyc,spirit整理).chm

    1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 阶段2:开始构建? 1.12.5 阶段3:正式创建 1.12.6 阶段4:校订 1.12.7 计划的...

    Think in Java(中文版)chm格式

    1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 阶段2:开始构建? 1.12.5 阶段3:正式创建 1.12.6 阶段4:校订 1.12.7 ...

    JAVA_Thinking in Java

    1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 阶段2:开始构建? 1.12.5 阶段3:正式创建 1.12.6 阶段4:校订 1.12.7 计划的...

    Java初学者入门教学

    1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 阶段2:开始构建? 1.12.5 阶段3:正式创建 1.12.6 阶段4:校订 1.12.7 计划的...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 阶段2:开始构建? 1.12.5 阶段3:正式创建 1.12.6 阶段4:校订 1.12.7 计划的...

Global site tag (gtag.js) - Google Analytics