2016-08-18 2 views
0

Как я могу проверить Person, а затем автоматически проверить возраст null?Как проверить, имеет ли свойство Pojo значение null, тогда Pojo должен иметь значение null с Groovy

def person = new Person(name:'Jack') 
//when i check person, how can i direct check the person.age is null and return false 
if(person){ 

}else{ 
    log.info "person is not exist" 
} 

class Person{ 
    def name 
    def age 
} 
+0

, если вы считаете, что ваш собственный ответ правильный, чем этот вопрос может быть неправильно. что ваш ответ, кажется, предполагает, что вы ищете способ, если какое-то pogo имеет какие-либо свойства со значением 'null'. – cfrick

ответ

0

Вы можете safe navigation operator:

if (person?.age) { //if either person or age is null 
        //(or other falsy value like 0) it will be falsy 
     //... 
} 

Вы также можете просто цепь проверки:

if(person && person.age){} 

КСТАТИ: InstanceOf классов должны начинаться с нижнего регистра, так что вы должны написать:

def person = new Person(name:'Jack') 
+0

Это не представляется возможным, Поскольку у меня есть много объектов, которые необходимо проверить, Так что мне нужно как-то проверить все Pojos, а не проверить свойство Pojo, –

+0

, например if (isNull (Person)) {} защиту IsNull (Object о) { поля поля = o.getFields(). получить ...... если (! поле) { возвращение нуля }} –

0

Кажется, работа ......
может кто-нибудь дать мне совет?

import groovy.util.logging.Log4j 
import java.lang.reflect.Field 
import org.junit.Test 

@Log4j 
class TestNull { 

    @Test 
    void testNotNull(){ 
     ObjectA a = new ObjectA(a : "AAA", b : "BBB", c : "CCC", d:"DDD") 
     if(isNull(a)){ 
      log.info "a is not null" 
     }else{ 
      log.info "a is null object" 
     } 
    } 

    @Test 
    void testIsNull(){ 
     ObjectA a = new ObjectA(a : "AAA", b : "BBB", c : "CCC") 
     if(isNull(a)){ 
      log.info "a is not null" 
     }else{ 
      log.info "a is null object" 
     } 
    } 

    def isNull(Object obj){ 
     Boolean value = true 
     obj.getClass().getDeclaredFields().each{ Field field -> 
      field.setAccessible(true) 

      // check field is customize or not 
      if(!field.isSynthetic()){ 
       if(!field.get(obj)){ 
        log.info "${field}_${field.get(obj)}" 
        value = false 
        return value 
       } 
      } 
     } 
     return value 
    } 
} 

class ObjectA { 
    def a 
    def b 
    def c 
    def d 
} 
+0

я бы изменить это имя к чему-то вроде 'hasNullProperties'; «каждый» с возвратом здесь в основном неправильный. он работает здесь, но он не замыкает цикл (возврат в 'каждый' просто переходит к следующему элементу). вместо этого используйте 'every'. также имейте в виду, что вы попросили «не null» - но вы проверяете здесь превосходную правду. это также потерпит неудачу, если ваше свойство содержит '0' или' false' или '' '' ... – cfrick

0

Я думаю, вы скорее должны использовать Groovy truth вещь в вашем случае:

class Person{ 
    def name 
    int age 
    boolean asBoolean(){ 
    0 < age 
    } 
} 

assert new Person(age:2) 
assert !new Person(age:0) 
Смежные вопросы