<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java代碼中 : : 是什么語法?

          共 11616字,需瀏覽 24分鐘

           ·

          2021-09-04 19:32

          關(guān)注我們,設(shè)為星標(biāo),每天7:30不見不散,架構(gòu)路上與您共享 

          回復(fù)"架構(gòu)師"獲取資源

          • 一:簡潔
          • 二:方法引用
          • 三:Optional 可選值

          一:簡潔

          方法引用分為三種,方法引用通過一對(duì)雙冒號(hào):: 來表示,方法引用是一種函數(shù)式接口的另一種書寫方式
          • 靜態(tài)方法引用,通過類名::靜態(tài)方法名, 如 Integer::parseInt
          • 實(shí)例方法引用,通過實(shí)例對(duì)象::實(shí)例方法,如 str::substring
          • 構(gòu)造方法引用,通過類名::new, 如 User::new

          二:方法引用

          public final class Integer {
              public static int parseInt(String s) throws NumberFormatException {
                  return parseInt(s,10);
              }
          }
          通過方法引用,可以將方法的引用賦值給一個(gè)變量,通過賦值給Function,說明方法引用也是一種函數(shù)式接口的書寫方式,Lambda表達(dá)式也是一種函數(shù)式接口,Lambda表達(dá)式一般用于自己提供方法體,而方法引用一般直接引用現(xiàn)成的方法。
          public class User {
              private String username;
              private Integer age;

              public User() {
              }

              public User(String username, Integer age) {
                  this.username = username;
                  this.age = age;
              }

              @Override
              public String toString() {
                  return "User{" +
                          "username='" + username + '\'' +
                          ", age=" + age +
                          '}';
              }

              // Getter&Setter
          }
          public static void main(String[] args) {
              // 使用雙冒號(hào)::來構(gòu)造靜態(tài)函數(shù)引用
              Function<String, Integer> fun = Integer::parseInt;
              Integer value = fun.apply("123");
              System.out.println(value);

              // 使用雙冒號(hào)::來構(gòu)造非靜態(tài)函數(shù)引用
              String content = "Hello JDK8";
              Function<Integer, String> func = content::substring;
              String result = func.apply(1);
              System.out.println(result);

              // 構(gòu)造函數(shù)引用
              BiFunction<String, Integer, User> biFunction = User::new;
              User user = biFunction.apply("mengday"28);
              System.out.println(user.toString());

              // 函數(shù)引用也是一種函數(shù)式接口,所以也可以將函數(shù)引用作為方法的參數(shù)
              sayHello(String::toUpperCase, "hello");
          }

          // 方法有兩個(gè)參數(shù),一個(gè)是
          private static void sayHello(Function<String, String> func, String parameter){
              String result = func.apply(parameter);
              System.out.println(result);
          }

          三:Optional 可選值

          在Google Guava 中就有Optional,在Swift語言中也有這樣類似的語法,在Swift中將可選值作為一種數(shù)據(jù)類型,地位和基本類型平齊平做,地位非常高。
          /**
           * @since 1.8
           */

          public final class Optional<T{
              private static final Optional<?> EMPTY = new Optional<>();

              private final T value;

              private Optional() {
                  this.value = null;
              }

              // 返回一個(gè)空的 Optional實(shí)例
              public static<T> Optional<T> empty() {
                  @SuppressWarnings("unchecked")
                  Optional<T> t = (Optional<T>) EMPTY;
                  return t;
              }

              private Optional(T value) {
                  this.value = Objects.requireNonNull(value);
              }

              // 返回具有 Optional的當(dāng)前非空值的Optional
              public static <T> Optional<T> of(T value) {
                  return new Optional<>(value);
              }

              // 返回一個(gè) Optional指定值的Optional,如果非空,則返回一個(gè)空的 Optional
              public static <T> Optional<T> ofNullable(T value) {
                  return value == null ? empty() : of(value);
              }

              // 如果Optional中有一個(gè)值,返回值,否則拋出 NoSuchElementException 。
              public T get() {
                  if (value == null) {
                      throw new NoSuchElementException("No value present");
                  }
                  return value;
              }

              // 返回true如果存在值,否則為 false
              public boolean isPresent() {
                  return value != null;
              }

              // 如果存在值,則使用該值調(diào)用指定的消費(fèi)者,否則不執(zhí)行任何操作。
              public void ifPresent(Consumer<? super T> consumer) {
                  if (value != null)
                      consumer.accept(value);
              }

              // 如果一個(gè)值存在,并且該值給定的謂詞相匹配時(shí),返回一個(gè) Optional描述的值,否則返回一個(gè)空的 Optional
              public Optional<T> filter(Predicate<? super T> predicate) {
                  Objects.requireNonNull(predicate);
                  if (!isPresent())
                      return this;
                  else
                      return predicate.test(value) ? this : empty();
              }

              // 如果存在一個(gè)值,則應(yīng)用提供的映射函數(shù),如果結(jié)果不為空,則返回一個(gè) Optional結(jié)果的 Optional 。
              public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {
                  Objects.requireNonNull(mapper);
                  if (!isPresent())
                      return empty();
                  else {
                      return Optional.ofNullable(mapper.apply(value));
                  }
              }

              // 如果一個(gè)值存在,應(yīng)用提供的 Optional映射函數(shù)給它,返回該結(jié)果,否則返回一個(gè)空的 Optional 。
              public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper) {
                  Objects.requireNonNull(mapper);
                  if (!isPresent())
                      return empty();
                  else {
                      return Objects.requireNonNull(mapper.apply(value));
                  }
              }

              // 如果值存在,就返回值,不存在就返回指定的其他值
              public T orElse(T other) {
                  return value != null ? value : other;
              }


              public T orElseGet(Supplier<? extends T> other) {
                  return value != null ? value : other.get();
              }

              public <X extends Throwable> orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
                  if (value != null) {
                      return value;
                  } else {
                      throw exceptionSupplier.get();
                  }
              }
          }
          關(guān)于of方法,現(xiàn)在好像很流行,就是提供一個(gè)static方法,方法名稱叫of,方法的返回值返回當(dāng)前類,并且把構(gòu)造函數(shù)設(shè)置為私有private,用靜態(tài)of方法來代替構(gòu)造函數(shù)。
          public class User {
              private String username;
              private Integer age;

              private User() {
              }

              public static User of() {
                  return new User();
              }

              private User(String username, Integer age) {
                  this.username = username;
                  this.age = age;
              }

              public static User of(String username, Integer age) {
                  return new User(username, age);
              }
          }
          Main
          public static void main(String[] args) {
              // Optional類已經(jīng)成為Java 8類庫的一部分,在Guava中早就有了,可能Oracle是直接拿來使用了
              // Optional用來解決空指針異常,使代碼更加嚴(yán)謹(jǐn),防止因?yàn)榭罩羔楴ullPointerException對(duì)代碼造成影響
              String msg = "hello";
              Optional<String> optional = Optional.of(msg);
              // 判斷是否有值,不為空
              boolean present = optional.isPresent();
              // 如果有值,則返回值,如果等于空則拋異常
              String value = optional.get();
              // 如果為空,返回else指定的值
              String hi = optional.orElse("hi");
              // 如果值不為空,就執(zhí)行Lambda表達(dá)式
              optional.ifPresent(opt -> System.out.println(opt));
          }




          到此文章就結(jié)束了。如果今天的文章對(duì)你在進(jìn)階架構(gòu)師的路上有新的啟發(fā)和進(jìn)步,歡迎轉(zhuǎn)發(fā)給更多人。歡迎加入架構(gòu)師社區(qū)技術(shù)交流群,眾多大咖帶你進(jìn)階架構(gòu)師,在后臺(tái)回復(fù)“加群”即可入群。














          這些年小編給你分享過的干貨

          1.非常適合做私活或外包項(xiàng)目的開源后臺(tái)管理系統(tǒng)

          2.ERP系統(tǒng),自帶進(jìn)銷存+財(cái)務(wù)+生產(chǎn)功能,拿來即用

          3.帶工作流的SpringBoot后臺(tái)管理項(xiàng)目快速開發(fā)解決方案
          4.最好的OA系統(tǒng),拿來即用,非常方便

          5.SpringBoot+Vue完整的外賣系統(tǒng),手機(jī)端和后臺(tái)管理,附源碼!


          轉(zhuǎn)發(fā)在看就是最大的支持??

          瀏覽 26
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕乱伦视频 | 欧美内射黄网站 | 丁香五月婷婷啪啪啪 | 一本超碰久草 | 亚洲无码91 |