既然私有变量都能随意赋值了,私有的意义何在? 岂不是Java的大漏洞?我觉得不太可能!

解决方案 »

  1.   

    应该将要访问的成员变量改成public的。
      

  2.   

    既然设置成private说明已经不希望你去直接操作他了,可能类的设计者会给你提供向set的public的方法去设置吧
      

  3.   

    Java在类的接口方面要求的很严格。
      

  4.   

    别人都已经定义成私有的了
    肯定就是不想让你访问,或者认为你没有必要去访问这些变量问楼主一个问题:你访问这些私有变量的目的和意义何在?如果真想访问,只有对class文件反编译,然后自己修改
      

  5.   

    class bean1
    {
        private String a1;
        private String a2;
        public void setvalue1(String a)
       {
           this.a1=a;
       }
        public void setvalue2(String a)
       {
           this.a2=a;
       }
    }这样就OK拉
      

  6.   

    首先谢谢各位的关注.需要随意对私有成员赋值的动机来源于在对一个方法进行结构化测试(比如说条件/分支覆盖),需要给方法提供不同的参数以便于能够最大限度的走遍方法当中的所有条件/分支.由于不知道方法本身的语义(方法是任意指定的,没有什么信息可以指明方法的语义),所以需要寻找一种途径,能够设置对象的状态.
    Schlemiel(维特根斯坦的扇子)的方法我曾经使用过,但是这样的方法难以保证对象状态的一致性.例如有一个类有一个私有成员,表明了一个人的年龄.自然这个成员的有效取值范围绝对不应该超过0-200,可是我可以随便设一个10000,这样的状态还有什么意义?
    我曾经考虑过的方法有如下几项:方法                              缺点
    代码注射.直接修改对象相对应的字节码,   实现过于复杂,并且也
    在代码中添加一个方法,通过这个方法      难以保证对象状态的一致性。
    来对私有成员进行修改。Schlemiel的方法。相对来说,这是最       也难以保证对象状态的一致性。
    容易的一种方法。扫描源代码,找出哪些方法修改了哪        需要有源代码,如果没有源代码
    些数据成员,然后通过这些方法修改        ,则无能为力。而很多方法的参
    数据成员。         数都有可能是标准库中的类或者
    第三方的类。另外,直觉告诉我
    这个方法还有一点点不对劲,
    没有找出到底是什么。总之来说,这个问题涉及到面向对象语言的语义问题,很困难。能不能采取另外的方式?怎样才能不需要设置对象的状态呢?
      

  7.   

    修改jvm,使得private也能在外面访问。
    或者自己实现native方法,实现对private方法,变量的访问。
      

  8.   

    加上get set 方法就是了!! private 不可能从外面直接访问的 !
    private String name = null;
    public void set_Name(String str){
        name = str;
    }public String get_Name(){
        return name;
    }