1 原因如下:
由于Java开发过程中一不注意就会造成空指针异常,但是如果要避免这些空指针异常我们就可能需要写如下啰嗦有无聊的语句:
if(test != null && test.size() > 0) {..............}
为了避免写这些无聊的语句和 避免NPE错误,我们可以用如下用法进行替代。
2 用法如下:
@Test
public void test01() {
// 1 三目运算符替代处理-》jdk1.8 参考链接:javascript:void(0)
ternaryOperatorHandler("test", null, null);
// 2 数据判空替代处理-》jdk1.8
nullHandler(null, "test");
// 3 判空抛异常处理-》jdk1.8 参考链接:javascript:void(0)
nullThrowExceptionHandler(null);
// 4 equals处理-》jdk1.7
equalsHandler(null, "he");
// 5 检查集合是否为空(""或size()==0) TODO:需要引入 commons-collections 依赖
collectionNullHandler();
// 6 返回参数时,尽量不返回null,而是用 Collections.emptyList()、Collections.emptySet()、.............. 这种替代
// 7 注意自动拆箱的危险,使用基本类型和自动拆箱的数据对比时,尤其注意null
autoUnpackHandler();
}
/**
* 注意自动拆箱的危险,使用基本类型和自动拆箱的数据对比时,尤其注意null
*/
private void autoUnpackHandler() {
int i = 1;
Integer i1 = null;
Integer i2 = 1;
try {
System.out.println(i == i1);
} catch (Exception e) {
System.out.println("使用基本类型和自动拆箱的数据对比时,Integer那个为null,会造成异常抛出");
e.printStackTrace();
}
System.out.println(Objects.equals(i1, i2));
}
/**
* 检查集合是否为空(""或size()==0)
*/
private void collectionNullHandler() {
// 1 空集合演示
List<String> emptyList = new ArrayList<>();
// --以下结果打印为:CollectionUtils.isEmpty(emptyList):true, CollectionUtils.isNotEmpty(emptyList):false
System.out.println("CollectionUtils.isEmpty(emptyList):" + CollectionUtils.isEmpty(emptyList) + ", CollectionUtils.isNotEmpty(emptyList):" + CollectionUtils.isNotEmpty(emptyList));
// --以下打印结果为:CollectionUtils.isEmpty(null):true, CollectionUtils.isNotEmpty(null):false
System.out.println("CollectionUtils.isEmpty(null):" + CollectionUtils.isEmpty(null) + ", CollectionUtils.isNotEmpty(null):" + CollectionUtils.isNotEmpty(null));
}
/**
* 判空抛异常处理
*
* @param param1 []
* @since jdk1.8
*/
private void nullThrowExceptionHandler(String param1) {
try {
String s = Optional.ofNullable(param1).orElseThrow(() -> new Exception("判断到当前为空,直接抛异常了"));
System.out.println("param1=null,不会打印该条信息,因为前面泡了异常");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 数据判空替代处理
*
* @param param1 []
* @param param2 []
*/
private void nullHandler(String param1, String param2) {
// 第一种(Optional) @since jdk1.8
Optional<String> optionalS = Optional.ofNullable(param1);
optionalS.ifPresent(s -> System.out.println("param1=null,不会打印该条信息:" + s));
Optional<String> optionalS2 = Optional.ofNullable(param2);
optionalS2.ifPresent(s -> System.out.println("param2=test,会打印该条信息:" + s));
// 第二种(Objects.isNull):以下是Objects的用法 @since jdk1.7
// -------以下输出结果:Objects.isNull(null):true, Objects.isNull("test"):false
System.out.println("Objects.isNull(null):" + Objects.isNull(param1) + ", Objects.isNull(\"test\"):" + Objects.isNull("test"));
// 第三种 判断字符串是否为null或""
// TODO:需要引入 commons-lang3 依赖
// -------以下输出结果:StringUtils.isEmpty(""):true, StringUtils.isEmpty(null):true
System.out.println("StringUtils.isEmpty(\"\"):" + StringUtils.isEmpty("") + ", StringUtils.isEmpty(null):" + StringUtils.isEmpty(null));
}
/**
* equals替代处理
*
* @param param1 []
* @param param2 []
* @since jdk1.7
*/
private void equalsHandler(String param1, String param2) {
System.out.println(Objects.equals(param1, param2));
}
/**
* 三目运算符替代处理
*
* @param param1 []
* @param param2 []
* @param param3 []
* @since jdk1.8
*/
private void ternaryOperatorHandler(String param1, String param2, String param3) {
// 三目运算符
System.out.println(Optional.ofNullable(param1).orElse("a")); //test
System.out.println(Optional.ofNullable(param2).orElse("a")); //a
//或者 使用supplier生产 可传递方法
System.out.println(Optional.ofNullable(param3).orElseGet(() -> "abc")); //abc
}
3 参考链接如下:
标签:Java,System,优雅,isEmpty,param1,println,null,out,指针 From: https://blog.51cto.com/u_13854513/6710923