Объединить все ненулевые свойства POJO - PullRequest
3 голосов
/ 17 июня 2020

У меня есть POJO с 10-15 полями (может быть примитивным, настраиваемым объектом или строкой). Я хочу объединить все поля NonNull в строку.

Есть ли какой-нибудь чистый способ обойтись без использования 10-15 if statements.

Ответы [ 3 ]

2 голосов
/ 17 июня 2020

Вы можете использовать Reflection:

Foo foo = new Foo(3, 89, null);

Field[] fields = foo.getClass().getDeclaredFields();

for(Field field: fields) {
    Object fieldValue = field.get(foo);
    if(fieldValue != null) {
        // Do your actual logic here
        System.out.println(fieldValue);
    }
}

с классом Foo следующим образом:

    static class Foo {
        int bar;
        int barre;
        String barString;

        public Foo(int bar, int barre, String barString) {
            this.bar = bar;
            this.barre = barre;
            this.barString = barString;
        }
    }

примечание: это предполагает, что вы можете получить доступ к полям в Foo, если они private, то вместо этого вам нужно использовать геттеры.

0 голосов
/ 17 июня 2020

Вы можете установить все строки как "" по умолчанию:

class SomeObject {
    private String field1 = "";
    private String field2 = "";

    //constructor, getters and setters

    @Override
    public String toString() {
        return field1 + field2;
    }
}

Или сделать это в конструкторе:

class SomeObject {
    private String field1;
    private String field2;

    public SomeObject(String string1, String string2) {
        this.field1 = string1 == null ? "" : string1;
        this.field2 = string2 == null ? "" : string2;
    }

    //getters and setters

    @Override
    public String toString() {
        return field1 + field2;
    }
}

В качестве альтернативы вы можете изменить геттеры, чтобы они возвращали "", когда String имеет значение null, и используйте геттеры вместо прямых вызовов var в вашем методе concat.

class SomeObject {
    private String field1;
    private String field2;

    // constructor and setters

    public String getField1() {
        return field1 == null ? "" : field1;
    }

    public String getField2() {
        return field2 == null ? "" : field2;
    }

    @Override
    public String toString() {
        return getField1() + getField2();
    }
}
0 голосов
/ 17 июня 2020

если это просто строка, тогда вы можете объединить и заменить слово null пустым пространством, НО будьте осторожны с добавляемыми символами, используемыми для добавления полей (вы не хотите видеть что-то вроде john ,,, 22 ,, , true)

проверьте этот пример

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        // your code goes here
        String x = null;
        String a="Hello";
        Long l1=null;
        Long l2=55L;

        String r=a+x+l1+l2;
        r=r.replace("null", "-");
        System.out.println(r);
    }
}

будет напечатано

Hello - 55

...