Optional源码解析与实践( 二 )

Optional源码解析与实践
文章插图
2.3.3 值获取方法1)源码

  1. public T get() {
  2. if (value =https://www.huyubaike.com/biancheng/= null) {
  3. throw new NoSuchElementException("No value present");
  4. }
  5. return value;
  6. }
2)方法说明get(): 如果Optional不为空,则返回该Optional容器中的值,否则抛出NoSuchElementExceptio。
3)测试代码
  1. public static void main(String[] args) {
  2. Integer value1 = null;
  3. Integer value2 = 1;
  4. Optional<Integer> optional1 = Optional.ofNullable(value1);
  5. Optional<Integer> optional2 = Optional.of(value2);
  6. try {
  7. Integer result=optional1.get();
  8. System.out.println("optional1的值是:"+result);
  9. }catch (Exception e){
  10. System.out.println("optional1的值获取失败,原因:"+e.getMessage());
  11. }
  12. try {
  13. Integer result=optional2.get();
  14. System.out.println("optional2的值是:"+result);
  15. }catch (Exception e){
  16. System.out.println("optional2的值获取失败,原因:"+e.getMessage());
  17. }
  18. }
4)运行结果
Optional源码解析与实践

文章插图
2.3.4 判断方法1)源码
  1. public boolean isPresent() {
  2. return value != null;
  3. }
  4. public void ifPresent(Consumer<? super T> consumer) {
  5. if (value != null)
  6. consumer.accept(value);
  7. }
  8. public T orElse(T other) {
  9. return value != null ? value : other;
  10. }
  11. public T orElseGet(Supplier<? extends T> other) {
  12. return value != null ? value : other.get();
  13. }
  14. public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
  15. if (value != null) {
  16. return value;
  17. } else {
  18. throw exceptionSupplier.get();
  19. }
  20. }
2)方法说明
  • isPresent(): 判断optional是否为空,如果空则返回false,否则返回true
  • ifPresent(Consumer c): 如果optional不为空,则将optional中的对象传给Comsumer函数
  • orElse(T other): 如果optional不为空,则返回optional中的对象;如果为null,则返回 other 这个对象 。
  • orElseGet(Supplier other): 如果optional不为空,则返回optional中的对象;如果为null,否则调用其他函数并返回调用的结果
  • orElseThrow(Supplier exception): 如果optional不为空,则返回optional中的对象;如果为null,则抛出Supplier函数生成的异常
3)测试代码
  1. public static void main(String[] args) {
  2. Integer value1 = null;
  3. Integer value2 = 1;
  4. Optional<Integer> optional1 = Optional.ofNullable(value1);
  5. Optional<Integer> optional2 = Optional.of(value2);
  6. try {
  7. if(optional1.isPresent()){
  8. System.out.println("optional1的isPresent结果不为空");
  9. }else{
  10. System.out.println("optional1的isPresent结果为空");
  11. }
  12. }catch (Exception e){
  13. System.out.println("optional1的isPresent判空失败,原因:"+e.getMessage());
  14. }
  15. try {
  16. if(optional2.isPresent()){
  17. System.out.println("optional2的isPresent结果不为空");
  18. }else{
  19. System.out.println("optional2的isPresent结果为空");
  20. }
  21. }catch (Exception e){
  22. System.out.println("optional2的isPresent判空失败,原因:"+e.getMessage());
  23. }
  24. optional1.ifPresent(t->{
  25. int i =t+1;
  26. System.out.println("optional1处理后的值是"+i);
  27. });
  28. optional2.ifPresent(t->{
  29. int i =t+1;
  30. System.out.println("optional2处理后的值是"+i);});
  31. Integer value3 = 2;
  32. Integer result = optional1.orElse(value3);
  33. System.out.println("optional1执行orElse处理后的值是"+result);

    推荐阅读