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

    官方版本,亲测可用

    openbean.jar

    2. **BeanInfo类**:在`java.beans`包中,`BeanInfo`类是一个关键接口,它提供了关于JavaBean的元信息,包括默认的属性、事件和方法的描述,以及自定义的外观和行为。`openbean.jar`可能包含了对这些BeanInfo类的...

    javabeans.7z

    OpenBeans是Apache软件基金会的一个项目,它包含了实现JavaBeans规范的一些类和接口,比如`BeanInfo`接口。`BeanInfo`接口在JavaBeans中扮演着重要的角色,它提供了关于Bean元数据的信息,包括默认的属性值、事件...

    (doc)Extending The Visual Editor.pdf

    2. **实现BeanInfo类**:为 `MyCustomPrompter` 创建一个对应的 BeanInfo 类,描述其属性和事件信息。这一步对于让 Visual Editor 正确识别和操作自定义控件至关重要。 3. **调色板扩展**:接下来需要将 `...

    openbeans1.0.zip

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

    JAVA的内省机制(introspector)与反射机制(reflection).docx

    // 依据 Bean 产生一个相关的 BeanInfo 类 BeanInfo bInfoObject = Introspector.getBeanInfo(beanObj.getClass(), beanObj.getClass().getSuperclass()); // 定义一个用于显示的字符串 String output = ""; ...

    Spring源码学习十三:IntrospectorCleanupListener解析1

    这个类在Spring源码中扮演着一个重要的角色,主要目的是解决与`Introspector`相关的内存泄漏问题。首先,我们需要理解`Introspector`在Java中的作用。 `Introspector`是Java标准库`java.beans`包下的一个类,它的...

    Java反射中java.beans包学习总结.docx

    在示例中,为了将Map转换为TestDO对象,可能需要创建一个`PropertyDescriptor`来处理`nodeDO`属性,并利用`PropertyEditor`进行转换。 4. **Introspector**: `Introspector`类是java.beans包的关键部分,它负责从...

    openbeans(android)

    其中,`BeanInfo`类是一个关键组件,它提供了关于Bean的元数据信息,包括属性、事件、方法以及默认的外观和行为设置。在Android开发中,如果需要利用这些功能,就需要寻找替代方案,例如引入`openbeans.jar`。 `...

    openbean的jar包

    4. **Bean的复制**:BeanUtils类提供了copyProperties方法,可以方便地将一个Bean的属性复制到另一个Bean上。 5. **定制化BeanInfo**:允许开发者自定义BeanInfo类,以提供更详细的Bean元数据,增强Bean的行为和...

    openbeans.rar

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

    JavaBeans开发使用手册

    7. **BeanInfo类**:对于更复杂的自定义行为,开发者可以创建一个与JavaBean关联的BeanInfo类。这个类可以提供关于属性、事件和方法的额外元数据,甚至覆盖默认的行为。 8. **容器支持**:JavaBeans可以被Java应用...

    使用betwixt进行xml与java类之间的互转解析--代码

    为了方便地将XML文档转换为Java对象,以及将Java对象序列化为XML,Apache软件基金会提供了一个名为Betwixt的库。本篇文章将深入探讨如何使用Betwixt库实现XML与Java类之间的互转解析。 首先,我们需要理解Betwixt的...

    Presenting_Java_Beans.rar_java

    "Presenting Java Beans"可能还会讨论BeanInfo类,这是一个可选的接口,用于提供关于Java Bean的元数据,如自定义的属性编辑器和图标。通过BeanInfo,开发者可以扩展默认的行为,而不必修改原始的Bean类。 在提供的...

    beanutils-1.9.3-bin

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

    STK-X Tutorials-Java

    这是一个已知的问题,通常发生在com2java.exe图形用户界面长时间打开并多次更改设置时。为了避免这种问题,应该按照J-Integra技术支持的指导操作。 在教程内容中,还包括创建应用程序、向窗口添加STKX控件、发送...

    java使用commons-betwixt 实现bean与xml互转

    Java中的Apache Commons Betwixt库提供了一个简单的方法来映射Java Bean对象和XML文档之间的数据,使得在处理数据交换时能轻松地实现bean到XML的转换和XML到bean的反转换。本篇文章将深入探讨如何使用Commons ...

    java最全的API帮助文档

    `javaBeans`是Java编程中的一个关键概念,它遵循一套特定的设计规范,主要用于创建可重用的软件组件。JavaBeans帮助文档通常会包含以下方面的内容: 1. **属性**:JavaBeans通常包含一组公开的属性,这些属性代表了...

Global site tag (gtag.js) - Google Analytics