您现在的位置是:主页 > news > 做开发网站需要办理营业执照嘛/广州网站优化推广方案
做开发网站需要办理营业执照嘛/广州网站优化推广方案
admin2025/5/4 19:37:15【news】
简介做开发网站需要办理营业执照嘛,广州网站优化推广方案,分销,想自己做网站需要会什么软件原标题:Java Optional 实例介绍编译:ImportNew/唐尤华dzone.com/articles/java-optionalOptional是一种容器对象,可能包含也可能不含非null值。如果包含某个值isPresent返回true,调用get返回该值。Package : java.utilpublicfinal…
原标题:Java Optional 实例介绍
编译:ImportNew/唐尤华
dzone.com/articles/java-optional
Optional是一种容器对象,可能包含也可能不含非null值。如果包含某个值isPresent返回true,调用get返回该值。
Package : java.util
publicfinal classOptional extends Object
以下是 Optional 类中一些有用的方法列表:
1. 创建 Optional 相关方法
方法:Optional.of、Optional.ofNullable、Optional.empty:
Optional emptyOptional = Optional.empty;
Optional nonEmptyOptional = Optional.of( "name"); // 对 null 无效
Optional nonEmptyOptional = Optional.ofNullable(null); // 支持 null
2. 检查 Optional 值
方法:Optional.isPresent、Optional.ifPresent
如果 Optional有值,isPresent 返回 true
Optional nonEmptyOptional = Optional.of( "name");
assertTrue(nonEmptyOptional.isPresent);
ifPresent = 如果值存在,则执行代码块
在Optional出现前,需要在方法内进行以下null检查。
if(data == null){
System.out.println( " data is "+ data);
}
// data 是方法内部使用的对象
由于无法确保data在使用前进行了null检查,可能会抛出NullPointerException。
现在,引入Optional后,可以用ifPresent满足类似需求。
Optional nonEmptyOptional = Optional.of( "name");
nonEmptyOptional.ifPresent( x-> { System.out.println(x.length); } );
3. 通过 Optional 取值
get = 返回值包含在 Optional 中返回
Optional nonEmptyOptional = Optional.ofNullable( "orignal");
String value = nonEmptyOptional.get;
orElse = 如果值不存在,则返回默认值
// Optional 包含 null 时, 使用 orElse 值
Optional emptyOptional = Optional.ofNullable(null);
String value = emptyOptional.orElse( "default Value");
assertEquals( "default Value", value);
// Optional 不包含 null 时, 不使用 orElse 值
Optional nonEmptyOptional = Optional.ofNullable( "orginal");
String value1 = nonEmptyOptional.orElse( "default Value");
assertEquals( "orginal", value1);
orElseGet = 与 orElse 类似,如果 Optional 不包含值,用函数作为返回值
// Optional 包含 null 时, 使用 orElse
Optional emptyOptional = Optional.ofNullable(null);
String value = emptyOptional.orElseGet(-> "default value");
assertEquals( "default value", value);
// Optional 不包含 null 时, 不使用 orElse
Optional nonEmptyOptional = Optional.ofNullable( "orginal");
String value1 = nonEmptyOptional.orElseGet(-> "default value");
assertEquals( "orginal", value1);
orElseThrow = 与 orElseGet 类似,监测到值为 null 时抛出异常
@Test(expected = NullPointerException. class)
publicvoidOrElseThrowCheck{
String nullName = null;
String value = Optional.ofNullable(nullName).orElseThrow(NullPointerException:: new);
}
4. Optional 用法
使用 Optional 作为返回值
Optional 的常见用法是作为方法返回值。定义方法时,可以根据实现逻辑返回 null 或对象。返回 Optional 对象是一种很好的方法,开发人员知道返回值可能是 null,迫使他们合理地处理返回的对象。Optional 的优点在于,能够引导开发者进行恰当的检查,从而避免 NullPointerException。
下面的例子定义了 OptionalgetEmployeeWithId(int id) 方法,返回值类型为 Optional。调用者需要通过 Optional 方法得到返回值。执行过程中可以避免 NullPointerExceptions。
staticList employess = newArrayList<>;
publicstaticvoidmain(String[] args)throws EmployeeNotFoundException{
employess.add( newEmployee( "emp1", 1, 1000));
employess.add( newEmployee( "emp2", 2, 2000));
employess.add( newEmployee( "emp1", 3, 3000));
Optional employee = getEmployeeWithId( 1);
Employee e = employee.orElseThrow( -> newEmployeeNotFoundException( "emp not found"));
System.out.println(e);
}
publicstaticOptional getEmployeeWithId( intid) {
Optional employee = employess.stream.filter(e -> (e.getId == id)).findFirst;
returnemployee;
}
使用 Optional 作为方法参数
不推荐使用Optional 作为方法参数。假设一个方法包含两个参数:一个类型是 Optional,另一个类型是非 Optional。背后的逻辑是,第一个参数值可能为null。
这种情况,不要使用 Optional 作为参数,请进行方法重载。
上面的例子最好定义重载方法,只接受一个参数。
publicstaticOptional getEmployee( intid,Optional name) {
...
returnemployee;
}
// 更好的方法: 重载方法
publicstaticOptional getEmployee( intid,String name)
publicstaticOptional getEmployee( intid)
5. Java 各版本新增的 Optional 方法列表
Java 9
or:如果值存在,返回包含该值的 Optional 对象;否则,返回 or 函数生成的 Optional 对象。
ifPresentOrElse(Consumer super T>action, Runnable emptyAction):如果值存在,使用该值执行指定调用,否则使用空值执行调用。
stream:如果值存在,返回该值的顺序流(Stream);否则返回空流。
Java 10
orElseThrow:如果值存在,返回该值;否则抛出 NoSuchElementException。注意:与 Java 8 不同,不接受任何参数。
Java 11
isEmpty:如果值不存在,返回 true;否则返回 false。
6. 完整代码
源代码请参考下面 Git 链接:
源代码:方法 “getEmployeeWithId” 返回 Optional
源代码:Optional 方法测试用例
说明:Optional是基于值的类,应当避免对Optional 对象调用像引用相等性(==)、HashCode、同步等基于对象标识的操作,调用可能产生无法预测的结果。
7. 参考文档
以下是不同 Java 版本的参考文档:返回搜狐,查看更多
责任编辑: