本人是新手,对javabean的使用有些疑惑。我想请教3个问题。1、在一个bean里调用另一个bean的方法,例如被调用的bean是ABC,被调用的方法是def()。
(1)ABC abc = new ABC();abc.def(); (2)继承ABC,然后使用super.def();
两者有何区别?哪种更好?2、调用方法时,需要为方法传入参数。
(1)直接在调用的时候传入:def(int xx) (2)先设置成员变量属性,然后将此成员变量作为此方法的参数:setYY(xx);
两者有何区别?哪种更好?3、方法的返回结果。
(1)在方法里return返回结果 (2)将结果赋值给成员变量,然后通过getter方法取出结果。
者有何区别?哪种更好?

解决方案 »

  1.   

    1 语义上有继承关系的时候才用继承,否则就用聚集。区别是super只能在子类中调用。
    2 需要在Bean中保存变量值(也就是:有状态)的时候,用setXxx设值。另外,定义setXxx方法也方便IoC容器进行属性注入。
    3 同上。有状态时可以考虑getter方案。
      

  2.   

    1. 两种情况没啥可比较的,语境不同使用也不同,如果需要继承关系时用第二种, 第一种是再一个类里调用另一个类的方法,可以通过依赖注入来解耦合。
    2.应该是第二种方法好,第二种可以将属性设置为私有,再通过getter 和setter等方法进行设置或获取,防止其他类对该类属性的直接“粗暴”访问,只有该类自己能访问自己的属性,更安全。
      

  3.   

    、在一个bean里调用另一个bean的方法,例如被调用的bean是ABC,被调用的方法是def()。
    (1)ABC abc = new ABC();abc.def(); (2)继承ABC,然后使用super.def();
    两者有何区别?哪种更好?如果是工具类,比如时间处理什么的用(1)如果是和request相关的处理用(2)
    2、调用方法时,需要为方法传入参数。
    (1)直接在调用的时候传入:def(int xx) (2)先设置成员变量属性,然后将此成员变量作为此方法的参数:setYY(xx);
    两者有何区别?哪种更好?
    如果多出用到XX(2)第二种较好
    如果只有一个用(1)3、方法的返回结果。
    (1)在方法里return返回结果 (2)将结果赋值给成员变量,然后通过getter方法取出结果。
    者有何区别?哪种更好?return快,也比较好
      

  4.   


    2、第二种setXxx(yy){this.xxx = yy};传入时是通过setter方法把参数赋值给成员变量,再将成员变量作为被调用方法的参数。然而第一种def(yy);直接在调用方法的时候就传入参数不是更加快捷吗?
    3、同上,第二种getXxx;取出时是将结果赋值给成员变量,再通过getter方法return。然而,第一种直接在调用方法的时候,方法就return结果不是更加快捷吗?
      

  5.   

    1 所谓语义上有继承关系,就是按道理某类应该继承于某类。如Student应该可以继承于Person。符合继承的is a判断法则:每个Student都是一个Person。
    不要为了方法好调用而去继承,而应该是:
    如果继承,应该如何调用
    如果不继承,如何调用。2 有状态就是目标代码会持有你曾经送去的数据,然后,下一次你再访问,就会和前一次访问得到不同的结果。
      

  6.   

    第一个问题,我认为没有什么好不好的,每个做的事情不一样。你总不能不想new对象,就去extends吧?extends是父类和子类之间,在子类中会重写、甚至经常用到父类的一些方法。new一个对象,这样挺好的呀。在这个对象不在使用后,垃圾回收器会回收这个对象。第二个问题:一个标准的JavaBean包含三点:1私有属性,实现Serializable接口。2无参构造方法。3公有getter/setter方法。getter/setter都是在实体JavaBean中存在,这样是为了封装值!方法传参,这样是挺好的,如果方法传参用getter/setter,那么,我敢肯定一年二年后你在看代码,发现看不懂你当初写的是什么了。第三个问题:我曾经看到过一篇文章,好的程序员方法里只有一个return,return是返回一个结果,可以是任意对象也可以是基本数据类型,你说调用set,然后在调用get取出来,那么很明显,这样只能返回你自己定义的类,明明只是返回一个基本数据类型,你却要把它在封装一遍,这不是很麻烦吗?
      

  7.   


    1,例如数据库操作的Bean应该继承数据库连接的Bean?
    2,设置了Bean成员变量的值后,在下一次设置之前,Bean的那个成员变量都一直是那个值?
    那我下一次不设置的话取回的结果是否上一次的结果?
      

  8.   

    1,数据库操作的Bean一般持有一个数据库连接作为成员变量。不继承。
    2,可能是那个值,就看其他的操作会不会也影响到那个成员变量的值。
      

  9.   

    这个就是语义上并不继承的例子。“每个数据库操作Bean 都是 一个数据库连接”,判断并不成立
    “每个数据库操作Bean 都需要 一个数据库连接”,这是真实描述故不是继承,是聚集