利于你以后升级啊,比如也许你以后set的时候同时也要做其它事情,比如你get的时候可能以后返回一个计算值,隐藏实现,就能给你最大的自由,只要接口不变。

解决方案 »

  1.   

    利于你以后升级 and extend it.
      

  2.   

    但有些类我可能永远不去升级它,比如我一个类完全是一个对后台数据库的映射.就是一个很简单的java bean,事实上这样的类在系统里应该占一定的比例.
    To  linuxbing(翅膀) :
    问题是我们已经给别人提供了get,set方法让别人来修改和查询,这和直接把这些月收入、身高、体重、肝的颜色....都公开有什么区别?
      

  3.   

    基于以下几点原因:
    1. 更好的封装性。
    2. 更好的维护性。
    3. 更大的灵活性
    使其看起来更加面向对象,而不是面向结构体,
    最重要的是,getxxx()方法里有很多的处理,比如你有没有权限得到这个变量
    在get和set的过程中你可以控制,譬如合法性检查啊之类的,或者控制只让set不让get或者相反,一种数据保护的手段,只允许有权限的人(public protected or private)进行受控的操作
      

  4.   

    在这里再问一个简单的问题,就是当我new一个对象时,它申请的空间怎么计算.比如:
    public class MyTest {
        private int a;
        private OtherClass c;
        public MyTest {
         this.a = 100;
         this.c = new OtherClass ();
        }
        public int getA () {
            return this.a;
        }
        public void setA (int a) {
            this.a = a;
        }
        public OtherClass GetC () {
            return this.c;
        }
        public void setC (OtherClass c) {
            this.c = c;
        }
    }
    那么当我 new 一个 MyTest时,申请了多少内存空间呢.
      

  5.   

    如果楼主用不到那么多的好处,就直接写也无所谓,只是以后如果想做些改变,重构起来恐怕会多些困难
    -------------------------------------
    问题是我们已经给别人提供了get,set方法让别人来修改和查询,这和直接把这些月收入、身高、体重、肝的颜色....都公开有什么区别?
    -------------------------------------
    区别是,以后你可以重构get/set方法,不再简单的提供对月收入等的直接访问(需要权限限制或是计算处理等等)
      

  6.   

    To  shenyouth(新晴) :
    你说的这些道理我也明白,当然我不是说所有的都不用private,我的意思是不是有一些可以不用?
      

  7.   

    从实现功能上来说,
    public class a{
      public String aa=null;
    }

    a bb=new a();
    bb.aa="aaaaaa";
    和public class a{
     private String aa=null;
     public void setAa(String aa){
      this.aa=aa;
    }
    用a bb=new a();
    bb.setAa("aaaaaa");
    一样可以实现的,好处都在上面说了: )
    }
      

  8.   

    我来说点和大家观点不同的:
    这是java world的一篇文章。
    他的题目是:为什么get 和set方法是噩梦?楼主注意,这个并不是说你的观点是正确的,只能说你的观点是更不正确的。一下只是概要,详细信息可以登录网站查找。
    Why getter and setter methods are evil ?
    Make your code more maintainable by avoiding accessors Summary
    The getter/setter idiom is a commonplace feature in many Java programs. Most of these accessor methods, however, are unnecessary and can severely impact your systems' maintainability. Using accessors violates the basic object-oriented (OO) principle of encapsulation, so you should avoid them. This article discusses getter/setter cons and offers an alternative design methodology. (3,300 words; September 5, 2003) 
      

  9.   

    呵呵,楼主的想法我一开始学C++时也有
    但后来逐渐就知道了
    private变量之所以加上setter和getter是不让对象直接调用和修改,这样做的第一个好处就是容易以后的维护
    你的疑问是提供了这样的方法还不如直接修饰为public,那样还节省开支!
    不知道楼主有没有注意过,好的oo代码可不只是像这样的:
    private String str;
    public String getString() {
        return str;
    }
    public void setString(String str) {
        this.str=str;
    }
    这样的代码完全可以由public变量来取代
    而设计这种模式的初衷是这样的:
    private String str;
    public String getString() {
        if(str==null&&str.equals("someString"))
             return null;
        return str;
    }
    public void setString(String str) {
        if(str==null&&str.equals("someString"))
             return;
        this.str=str;
    }
    这段代码只是示意,也就说在使用setter和getter的时候可以控制对变量的操作,这样和直接取值和设值是完全不一样的,也就实现了封装的目的了
    这是我个人的了理解,请大家指正。
      

  10.   

    我还是先把funcreal(new PLMM[Integer.MAX_VALUE]) 提到的文章看一下:
    http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html?
    我考虑到的还有当增加大量的get,set方法那么new这个对象时,相应的会增加性能开销.
    我刚才提到的如何计算"new 一个 MyTest时,申请了多少内存空间",怎么没人响应:)
      

  11.   

    估计一个类对象使用多少内存空间一般是不准的
    下面方法,楼主参考一下
    Runtime.getRuntime().maxMemory();
    Runtime.getRuntime().freeMemory();
    jvm的内存使用情况
      

  12.   

    To  jFresH_MaN()(AbsolutelyFresh)(java欣人)
    应该可以计算出来吧,我的考虑是:
    一个对象的内存 = attribute + method的和
    在java里这个应该是不随着硬件的改变而改变的.
    一个int是4k,一个类在没有new以前应该是一个指针的空间是不是2k?
    至于method使用内存空间的计算还是留给大家来回答了.
      

  13.   

    to  shipatrioc(风吹雨打哗啦啦) 
    不止这些,还有大约是四个byte的类信息。
      

  14.   

    getxxx()方法里有很多的处理,比如你有没有权限得到这个变量
    在get和set的过程中你可以控制,譬如合法性检查啊之类的,或者控制只让set不让get或者相反,一种数据保护的手段,只允许有权限的人(public protected or private)进行受控的操
      

  15.   

    争论到现在大家都有个一致的意见,就是封装性和灵活性.其实在我写第一行java代码时我也是毫不犹豫的要进行封装.但最后发现有好多代码以后不可能去升级,去加检查控制.简单的就是对数据库表的封装.它就是数据库的对象表示而已,我为什么要加检查.这样的需求在现实中应该存在的吧!
      

  16.   

    你这问的其实是class和结构的区别,什么权限访问啊,封装啊都是有道理,但不是主要的。之所以使用类,最主要的是为了继承,要不然用结构一样能实现那些方法的功能!
      

  17.   

    其实这也不是一个规则,必须要遵守的
    我们应该灵活一点的,如果用public完全可以实现需求,那就不用private
    楼主是不是考虑得太多了
      

  18.   

    bean是个规范,在像spring这种IOC的框架中,你可以通过在相关配置文件中给指定的bean的属性设置相应的值,那么它通过什么样的方法将值放到创建的bean对象中?答案就是通过给定的bean的属性的名字找到set方法,调用set方法。
      

  19.   

    另外需要请教一下 jFresH_MaN()(AbsolutelyFresh)(java欣人):
    估计一个类对象使用多少内存空间一般是不准的?这话怎么讲.