连接 POJO 的所有非空属性

Concat all nonNull properties of a POJO

我有一个 POJO,它有 10-15 个字段(可以是原始的、自定义对象或字符串)。 我想连接字符串中的所有 NonNull 字段。

有没有不使用 10-15 的干净方法 if statements

如果这只是一个字符串,那么您可以连接然后将单词 null 替换为空 space,但要小心用于附加字段的附加字符(您不想看到类似 john 的内容,22,真)

检查这个例子

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

你可以使用反射:

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 class:

    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 中的字段,如果它们是私有的,那么您必须改用 getter。

默认情况下,您可以将所有字符串设置为""

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 时,您可以将 getter 修改为 return a "",并在 concat 方法中使用 getter 而不是直接调用 var。

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();
    }
}