简体   繁体   中英

Detect which field != null in POJO class?

Here I am trying to get values from Firebase database.

public class User {

    String id = null;
    String name = null;

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

Some of those getter fields are null, and checking one by one is lengthy coding.

activityRef.child(uid).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot)
    { 
        User usr =dataSnapshot.getValue(User.class); 
        //here i want to check which value!=null 
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
});

You can use a reflective solution but it will be far slower than if (object.getField() != null) {...}

As I've undestand it, there's only one value that is non-null?

You can achieve it like this:

User class:

class User {
    private String id;
    private String name;

    public String getId() {
      return id;
    }

    public void setId(String id) {
      this.id = id;
    }

    public String getName() {
      return name;
    }

    public void setName(String name) {
      this.name = name;
    }

    // this uses reflection to get the first non-null field
    // you can modify it to return a list of non-null fields
    // in the case I've misunderstood the point
    public Field getFirstNonNullField() {
      for (Field f : getClass().getDeclaredFields()) {
        f.setAccessible(true);
        try {
          if (f.get(this) != null)
            return f;
        } catch (IllegalArgumentException | IllegalAccessException e) {
          // TODO handle this exception as you want
          e.printStackTrace();
        }
      }
      return null;
    }
}

Main method // example of use

public static void main(String[] str) {
    User u = new User();
    u.setName("hello");
    Field f = u.getFirstNonNullField();
    try {
      System.out.print(f.get(u));
    } catch (IllegalArgumentException | IllegalAccessException e) {
      // TODO handle this exception as you want
      e.printStackTrace();
    }
  }

I think this will help you to find solution.

activityRef.child(uid).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot)
            { 
                User usr =dataSnapshot.getValue(User.class); 
                for (Field f : User.class.getDeclaredFields()){
                   if(f.get(usr) != null){

                    }
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM