【发布时间】:2020-06-17 11:08:11
【问题描述】:
我有一个POJO,它有 10-15 个字段(可以是原始的、自定义对象或字符串)。
我想将所有NonNull 字段连接到一个字符串中。
不使用 10-15 if statements 有什么干净的方法吗?
【问题讨论】:
-
你能解释一下你将使用连接字符串的用例吗?或者你可以使用杰克逊
标签: java if-statement pojo code-cleanup
我有一个POJO,它有 10-15 个字段(可以是原始的、自定义对象或字符串)。
我想将所有NonNull 字段连接到一个字符串中。
不使用 10-15 if statements 有什么干净的方法吗?
【问题讨论】:
标签: java if-statement pojo code-cleanup
你可以使用反射:
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 中的字段,如果它们是私有的,那么您必须使用 getter。
【讨论】:
如果这只是一个字符串,那么您可以连接然后将单词 null 替换为空格,但要小心用于附加字段的附加字符(您不想看到像 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);
}
}
这将打印出来
你好--55
【讨论】:
您可以将所有字符串默认设置为"":
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;
}
}
或者,您可以修改 getter 以在 String 为 null 时返回 "",并在 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();
}
}
【讨论】: