连接 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();
}
}
我有一个 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();
}
}