前言:
某些场景下,一个变量不允许null,需要去根据是否为null一个一个的填充默认值,好不繁琐,当然我们是有好多办法的。
在某种特定的场景下,还是适合写个通用的填充函数,对对象进行初始化。
得出的结论为:
1、形式参数为null,无类型;
2、形式参数为null,无引用;
形参为null值无类型
import java.math.BigDecimal;
public final class NullTypeDemo {
/**
* @param args
*/ public static void main(String[] args) {
Integer i1 = null;
BigDecimal decimal1 = null;
// null值填充
fillNull(i1);
fillNull(decimal1);
// 输出: null,null
System.out.println(i1 + "," + decimal1);
// null值再次填充
i1 = fillNull(i1);
decimal1 = fillNull(decimal1);
// 输出: null,null
System.out.println(i1 + "," + decimal1);
}
/**
* @param obj
* @param <T>
* @return
*/ private static <T> T fillNull(T obj) {
if (obj instanceof Integer) {
obj = (T) new Integer(0);
} else if (obj instanceof BigDecimal) {
obj = (T) new BigDecimal("0.00");
}
return obj;
}
}
变量为null值填充默认值
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
public final class NullFillDemo {
/**
* @param args
*/ public static void main(String[] args) {
Integer i1 = null;
BigDecimal decimal1 = null;
String string = null;
Object obj = null;
List list = null;
// null值填充
fillNull(i1, Integer.class);
fillNull(decimal1, BigDecimal.class);
fillNull(string, String.class);
fillNull(obj, Object.class);
fillNull(list, List.class);
// 输出: null -> null -> null
System.out.println(i1 + " -> " + decimal1 + " -> " + string);
// 输出: null -> null
System.out.println(obj + " -> " + list);
// null值再次填充
i1 = fillNull(i1, Integer.class);
decimal1 = fillNull(decimal1, BigDecimal.class);
string = fillNull(string, String.class);
obj = fillNull(obj, Object.class);
list = fillNull(list, List.class);
// 输出: 0 -> 0.00 ->
System.out.println(i1 + " -> " + decimal1 + " -> " + string);
// 输出:java.lang.Object@73c6c3b2 -> []
System.out.println(obj + " -> " + list);
}
/**
* @param obj
* @param tClass
* @param <T>
* @return
*/ private static <T> T fillNull(T obj, Class<T> tClass) {
if (tClass.getName().equals(Integer.class.getName())) {
obj = (T) new Integer(0);
} else if (tClass.getName().equals(BigDecimal.class.getName())) {
obj = (T) new BigDecimal("0.00");
} else if (tClass.getName().equals(String.class.getName())) {
obj = (T) new String("");
} else if (tClass.getName().equals(List.class.getName())) {
obj = (T) new ArrayList(10);
} else {
obj = (T) new Object();
}
return obj;
}
}