关于BeanInfo的一个问题

问题描述

[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方法和字段?还望知道的人告知一二,

解决方案

LZ自己已经说出了正确答案了
解决方案二:
补充下,Java就是按你所说的,只看getter和setter来判别属性。甚至即使你定义个public的属性,不提供getter和setter,Java反而找不到这个明明可以访问的属性。我觉得主要原因是Java世界不推荐public属性,推荐用getter和setter来“间接”处理。而在大多数情况下getter和setter也是相对较好的选择。比如属性需要只读或只写。需要在getter或setter时做特殊处理,比如返回只读集合时。同个属性扮演多个角色。比如日期属性,既有日期的getter和setter,也有(默认)格式化成String的getter和setter。虚拟的属性。比如代理模式下,好多属性并不是自己的。或者根本就是一段逻辑处理等。等等。后两种情况下,都是无法做出楼主提出的引用判断是不是有这个属性。另一方面,getter和setter导致大量的臃肿代码这个问题,虽然讨论很多,目前看来,类似C#等语言那种改进还遥遥无期。
解决方案三:
bean代表一个数据对象,你的测试bean写的就已经不是规范的。还是说这样只是为了让所有权在我们手上,让我们使用规范的bean。提供完整的set get方法和字段?----这里不一定非要有一对get set方法。可以只有get,但不能只有set,既然用到bean又不符合mvf思想那又有什么意义呢?yunzhu 已经说得很清楚了,你自己已经说了正确答案
解决方案四:
class A{ private int a; //这是字段名 public void setAbc( a) { this.a = a; } public int getAbc() { return this.a; }}abc就是你的属性名 prodes.getName() 拿的是属性名 要区别开字段名 和 属性名

时间: 2024-09-12 14:04:33

关于BeanInfo的一个问题的相关文章

用Introspector提取BeanInfo

当我们拖放一个Bean的调色板并将它放入到窗体中时,一个Bean的最关键的部分的规则发生了.应用程序构建工具必须可以创建Bean(如果它是默认的构建器的话,它就可以做)然后,在此范围外访问Bean的源代码,提取所有的必要的信息以创立属性表和事件处理器. 解决方案的一部分在11章结尾部分已经显现出来:Java 1.1版的映象允许一个匿名类的所有方法被发现.这完美地解决了Bean的难题而无需我们使用一些特殊的语言关键字像在其它的可视化编程语言中所需要的那样.事实上,一个主要的原因是映象增加到Java

自己动手做一个SQL解释器

自己动手做一个SQL解释器在一些小型的应用中,完全没有必要使用大型数据库软件.自己做一个SQL解释器就能用数据库的方式来管理了.这个解释器,能解释常用的SQL命令.你可以自行添加其他功能. <?phpclass DB_text {  var $conn;  var $classname = "db_text";  var $database;  function on_create() {  }  function connect($database_name) {    $th

PS 15分钟快速绘制一个快播图标

  今天的教程@无梦不欢001 教大家绘制一个精美的快播图标,教程不难,主要是图层样式的运用,熟练的话15分钟就可以搞定.源文件已附上方便学习,来收! 分类: PS入门教程 ps图标制作教程

PS绘制一个太空中发光的行星教程

photoshop教程中我将为大家介绍如何轻松地使用photoshop中的云彩滤镜和扭曲滤镜制作一颗炫酷的行星.最终效果如图所示 1.创建一个新图片,大小为940*700,背景填充黑色,新建一个图层,使用套索工具(羽化50px)绘制一个椭圆选区,然后执行"滤镜-渲染-云彩",如图所示 2.按下Ctrl+L打开色阶调整框,应用下图所示的设置. 3.执行"滤镜-扭曲-旋转扭曲",如图所示 photoshop教程 4.设置角度为999,如图所示 分类: PS入门教程

PS制作一个超酷的气功冲击波效果教程

photoshop教程主要为大家介绍使用photoshop的烟幕笔刷制作一个气势磅礴的气功波.制作过程比较复杂,主要是烟雾形状的调整和虎头的烟雾效果调整,要按照虎头的形状变形烟雾. 最终效果 1.在Photoshop中创建一个新文件.我使用的屏幕分辨率为1920 × 1200,用灰色(#b8b8b8)填充画布. 2.创建一个新层,填充黑色.确保前景色和背景色分别为白色和黑色,去滤镜>渲染>云. 我的目标是把这些云彩变成漂亮的线性效果.因此去滤镜>模糊>动感模糊,距离999px,角度

注册表 应用程序路径-注册表操作:通过注册表来获取到一个应用程序的安装路径~!~!~!~!~!~!~!~!~!

问题描述 注册表操作:通过注册表来获取到一个应用程序的安装路径~!~!~!~!~!~!~!~!~! 10C C币快没有了,希望大神看到不要嫌弃赏金!!!!!!不吝赐教.... 解决方案 HKEY_LOCAL_MACHINEsoftwaremicrosoftwindowscurrentversionuninstall软件名,如果有,一般在这个里面 解决方案二: 你能找到某个软件的注册表 逐个点开 后面 '数据'那一列里面会有路径显示 解决方案三: 一个操作注册表的类 解决方案四: 操作?还是程序控

sql2008-求一个C# SQL做的旅游信息管理系统,不要网页的那种。

问题描述 求一个C# SQL做的旅游信息管理系统,不要网页的那种. 实现简单的景点查询,添加 删除:景点的介绍,修改,以及 管理员及用户个人信息的注册等. 解决方案 http://download.csdn.net/detail/vaeigffsgdfgfdfs/5646183 解决方案二: http://download.csdn.net/detail/wangyindiwyd/3621599 解决方案三: http://download.csdn.net/download/u01049142

分享一个HP EVA4400/6400/8400/P6000通用的数据恢复方法

[引言] 本文档建立在针对HP EVA的大量测试性研究基础上,所有的细节几乎均为对EVA的破译型研究,目前全球范围内尚未发现类似资料,故可能表述方式和结论并不精确,仅为参考之用. 我们公司为研究HP EVA系列算法,花费了大量的人力物力,目前应为全国唯一的研究此项技术的公司,转载请注明来源. [前因] HP EVA4400/6400/8400因接近退役,已进入高故障区间,用户往往会认为花费几十万甚至上百万购买的eva系列应该是非常稳定的,但实际上无论多么昂贵的存储设备,使用的磁盘是相同或相似的.

sql-数据库视图里要创建一个计算的字段,如何避免被除数为零

问题描述 数据库视图里要创建一个计算的字段,如何避免被除数为零 数据库视图里要创建一个字段,是个除法,但被除数可能为零,我按照网上讲的CASE WHEN方法改了之后,总提示我表达式无效或缺少,我贴出来我的代码 ROUND(CASE WHEN V_RECOMMAND_CANDIDATE.vote_total > 0 THEN ((CAST(RECOMMAND_CANDIDATE_1.vote_agree AS FLOAT) / V_RECOMMAND_CANDIDATE.vote_total *