最近在做一个项目,碰见了一个很奇怪的问题:A a = new A();      if(a!=null){    ....................} a为null   要求:          a的值为null,  但把a这个对象当做  空      该如何做          其中     A a = new A();    a对象在后面的程序中被调用过,   所以不能用    A  a = null;   这种方式来解决 跪求  解答…… 阿门……

解决方案 »

  1.   


    public class A{
       
        boolean  isNull="true";//true 为空 ,false则不为空
    } = = 。。不知道你是不是这个意思
      

  2.   

    你后面的程序要使用A a这个对象么 你可以先clone下这个对象A 后面的用克隆的对象 然后这里对象A设为null咯
      

  3.   

    楼主  回答我的问题  你是想a为null时进入 if   还是想a不为null时进入if
      

  4.   

    举个例子
    public class A{
      public String aa;
      public String bb;
      public String cc;
    }public class Test {    public static void main(String[] args) {
            A a = new A();
            ****
            ****
            // 判断a是不是null
            if(a == null){
               *****
            }
        }
    }(1)
      A a = null;   这时,a == null 是true(2)
      A a = new A(); 这时 ,a ==null 是false要求: 
       作为情况(2)时,想  a 为null   是true的处理该怎么做???
      

  5.   

    没懂你的意思啊,要是C++,这样的代码就是可以实现的。重载new即可。
      

  6.   


    不进入if循环,并且 对象a 会被后面的程序调用…………3Q
      

  7.   


    clone  ???  真没用过,求指点……
      

  8.   

    那用StringUtil.isAllEmpty()呀StringUtil.isAllEmpty(a.arg1,a.arg2),也许好使。 就像这样判断
       if(a != null && !StringUtil.isAllEmpty(a.arg1,a.arg2)){
         ************
     }
    不知是不是这个意思呢
      

  9.   

    对象有个.clone()方法的。。你可以看下API就知道咯
      

  10.   


    public class A {   public String aa;
       public String aa;
       public String aa;  ************(各种属性以及方法)}public class Test {    /**
         * TODO Javadoc
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
           
            A a = new A();
           **********
           **********
           if(a!= null){
           
            ************(各种处理)
          }    }}(1)
        A a = null       a == null 为true
    (2)
       A a = new A();    a == null 为false要求:
        由于对象a在程序后面呗调用,所以用(2),但是要使   对 a 的判断  a == null 为true 
        该怎么做???
      

  11.   

    你A是new 出来的肯定不会为null..你这个if 丢在这里有什么意义。
      

  12.   

    就是说明白:    我要取数据库里面的数据, 当数据库里面没得数据的时候,就是空
        
                之所以有这个if    就是怕出现   数据库没数据的情况,一旦出现空   就直接在下面程序报错   对象a  用内存地址,有空间,所以用   a == null  始终是false    这个我知道现在是  我想  在取数据  取不到, 也不让a  进入if里面……
      

  13.   

    意思就是: 就像这样判断
      if(a != null && !StringUtil.isAllEmpty(a.arg1,a.arg2)){
      ************
     }
    但是A里面要是有十几个,或者更多,这样判断岂不是非常累赘啊。人家就是想要个简便的方法嘛
    同求啊
      

  14.   

    如果是想求简便的话,可以做一个共通方法,传入参数为Object,java中有方法可以取得一个对象的所有属性值(方法我忘了),循环判断即可。
      

  15.   

    ⊙﹏⊙b汗……他是我同事,就是这样把我给难住了……这个方法累赘额,  假如  对象a  有n个属性,那岂不是要写N个值???   
      

  16.   

    是不是分不清null、“”、isEmpty()、equals(anObject)
      

  17.   


    绝对不是的 ……    这些都懂……   我现在正在看   对象.clone()这个方法,  现在还很晕乎,有木有那位大侠,能讲解???
      

  18.   

    org.apache.commons.beanutils.PropertyUtils
    使用这个类可以获得一个对象的所有属性。具体方法你自己找找吧
      

  19.   

    1,a是一个对象,里面存储了从数据库中读出的一些数据。2,可能存在数据库里没有数据的情况,这种情况下,a为“空”3,在a为“空”的情况下,不允许执行if中的代码。是不是这个意思?if(a != null && !a.isEmpty())
    {
       //xxx
    }isEmpty自己实现一下。a为“空”代表什么意思,这个只能由你决定,没有普适的这种“空”,所以isEmpty也只能你自己写。如果你希望有一个简单的isEmpty,那么首先你要明确说明这里的“空”具体指什么(是指对象的所有属性都为0或者null或者0.0或者false吗?)。
      

  20.   


    恩,对的,  我要说的就是你这个意思……这个“空”指的就是     value   为空    就是    对象 a 的value为空      就是   对象  a   有n个  属性   岂不是  要写N个  value 的判断,所以……
      

  21.   

    不用写N个判断啊,如果全为空不执行的话,就写
    if(属性1不为空 && 属性2不为空 && 。。)这样的至少一个为空就不执行的话,写成
    if(属性1不为空 || 属性2不为空 || 。。)这样的
      

  22.   

    楼主这种情况不可能出现null
    a是你实例化出来的A a = new A();   
    a=GetData();
    if(a!=null){  ....................}
      

  23.   

    可以实现我要说的, 这是我工作时候的一个BUG   一定可以解决……
      

  24.   

    //从数据库取出A类的对象赋给a对象
    A a = getAFromDAO( );
    if(a != null ){
    //只要这个对象不管是什么属性有值 就会进入这if语句
      a.getXXX();
      
    }
    else{
      //如果不管什么属性都没值就会进入这个else
      //打印错误}
      

  25.   

    你为何要揪住null不放呢,判断取得数据大小是不是为0不就行了。
      

  26.   

    感觉你在类A的构造函数里面会去访问数据库, 读取数据。 如果这样的话, 如果数据有异常, 抛exception不就行了, 外面要try, catch。 不要用if来进行判断。
      

  27.   

    感觉你的读数据库操作应该是在类A的构造函数里进行的, 如果是的话, 读完数据后, 在构造函数里马上进行数据校验, 如果数据不对或访问数据库过程本身有异常发出,就从构造函数往外抛个异常好了, 外面初始化实例时要try, catch, 不用if判断。
      

  28.   


    这个想法非常好,但是 :请问如何具体实现呢???呵呵……难道是   size???
      

  29.   

    亲你都走到这一步了--->A a = new A();   
    a怎么可能不为空呢?
      

  30.   

    A a = new A(); 
    a = null既然后面要用,那a肯定不能给null了,
    所以楼主还是相别的办法解决这个问题吧,比如添加一个属性来控制。
      

  31.   

    30楼的说法如果你同意,那就是你描述的不太准确。
    new出来后用null来判断是肯定不行的,new了就在堆内存分配空间了,这和null的意义完全相反。利用反射,我觉得你可以这样做:
    先从数据库获得A类的对象a,具体怎么获得看你用的什么底层框架。然后用反射来处理判断,可以避开对每个VALUE进行判断。
    Boolean isEmpty=true;//标记变量
    Field[] fieldArray=A.getDeclaredFields();
    for(Field field:fieldArray){
      Object certainValue=field.get(a);
      if(certainValue!=null){
        isEmpty=false;
        break;
      }
    }然后根据标记变量的值来做下面的if else判断,isEmpty为true则a对象每个字段都为空,否则就至少有一个字段有值。
      

  32.   

    这个有可能行不通哦... 有可能里面是基础类型. 不会为null呢?
    或者里面有string类型. 虽然数据库返回没有数据但是返回的是一个空字符串呢?
    我比较赞同在A这个类里面加一个isEmpty方法. 这个方法里面判断所需要检查的属性是否有值.
    在判断的时候if ( null != a && !a.isEmpty() )然后执行后面代码.public class A {
        private int aId;
        private String aName;
        private List<String> childs;    /**
         * 此处省略很多get/set方法
         */
        public boolean isEmpty() {
            if ( this.aId != 0 && aName != null && !"".equals(aName) && null != childs
                     && !childs.isEmpty() ) {
                 return false;
            }
            return true;
        }
    }public class Test {
        public static void main(String[] args) {
            A a = new A();
            if ( null != a && !a.isEmpty() ) {
               /**
                * a不为null且属性值都有
                */
            }
        }
    }
      

  33.   

    经过各位的解说。。终于知道,原来LZ只是要判断里面有没有数据,但是,你判断有没有数据不是用null啊!!!
    自己写个方法判断下啊,不要说逐个逐个遍历属性很麻烦什么的
      

  34.   

    public class A {
        private int aId;
        private String aName;
        private List<String> childs;    /**
         * 此处省略很多get/set方法
         */
    }47楼考虑是很有道理的,   但是这次项目   还暂时没有这个方面的问题,  46楼的解法相当好……  其实A类就是一个DAO……至于如何获得 那就是自己看着写,谢谢……
      

  35.   

    而且楼上的也都是牛叉啊实例化了怎么都不可能再出现a==null啊。。
      

  36.   

    如果你真心要判断null,那也是a.xx==null吧。。或者a.xx.equal("")
      

  37.   

    纠正下错误,
    Field[] fieldArray=A.getDeclaredFields();应该是Field[] fieldArray=A.class.getDeclaredFields();另外47楼说的对,这个办法欠妥,我也没想到有什么能挽回的方法,看来只能添加isEmpty()方法了。