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);

    推薦閱讀