当前位置: 首页 > news >正文

德阳建设公司网站搜索广告优化

德阳建设公司网站,搜索广告优化,网站怎么做视频,wordpress 模板 排名Optional使用详解 文章目录Optional使用详解1.构造函数2.Optional.of(T value)作用使用源码&#xff08;只想知道怎么用的可以略过&#xff09;Optional.ofNullable(T value)作用使用源码.orElse(T other)作用使用源码.orElseGet(Supplier<? extends T> other)作用使用源…

Optional使用详解

文章目录

  • Optional使用详解
      • 1.构造函数
      • 2.Optional.of(T value)
        • 作用
        • 使用
        • 源码(只想知道怎么用的可以略过)
      • Optional.ofNullable(T value)
        • 作用
        • 使用
        • 源码
      • .orElse(T other)
        • 作用
        • 使用
        • 源码
      • .orElseGet(Supplier<? extends T> other)
        • 作用
        • 使用
        • 源码
      • .map(Function<? super T, ? extends U> mapper)
        • 作用
        • 使用
        • 源码
      • isPresent()
        • 作用
        • 使用
        • 源码
      • ifPresent(Consumer<? super T> consumer)
        • 作用
        • 使用
        • 源码
      • filter(Predicate<? super T> predicate)

为了防止空指针报错NullPointerException,一我们都会加上if,else,想让代码变得更优雅,JAVA8提供了Optional类来优化这种写法

1.构造函数

构造函数使用private修饰,不能直接被外部访问(没办法new出来),Optional的本质,就是内部储存了一个真实的值,在构造的时候,就直接判断其值是否为空。下面为源码

/*** Constructs an instance with the value present.** @param value the non-null value to be present* @throws NullPointerException if value is null*/private Optional(T value) {this.value = Objects.requireNonNull(value);}//requireNonNull()方法public static <T> T requireNonNull(T obj) {//使用构造函数创建对象,value为null则报空指针if (obj == null)throw new NullPointerException();return obj;}

2.Optional.of(T value)

一般推荐使用Optional.ofNullable(T value),在实际生产中很少使用of()方法,因为使用of()方法,value为null时会报出空指针。不过已有一些场景会用到,比如一些需要空指针暴露的接口或测试类中。

作用

  • 当value值为空时,依然会报NullPointerException
  • 当value值不为空时,能正常构造Optional对象。

使用

//1.当 str=null,报空指针
String str = null;
Optional<String> str1 = Optional.of(str);

源码(只想知道怎么用的可以略过)

   public static <T> Optional<T> of(T value) {//构造函数创建对象return new Optional<>(value);}//构造函数private Optional(T value) {this.value = Objects.requireNonNull(value);}//requireNonNull()方法public static <T> T requireNonNull(T obj) {//若传入的value为null,则报空指针if (obj == null)throw new NullPointerException();return obj;}

Optional.ofNullable(T value)

与of(T value)最大的区别就是,value可以为空,推荐使用

作用

  • 当value值为空时,不会报空指针。
  • 当value值不为空时,能正常构造Optional对象。

使用

String str = null;
//str为空时不会报空指针
Optional<String> str2 = Optional.ofNullable(str);

源码

    public static <T> Optional<T> ofNullable(T value) {//value为null时,执行empty()方法return value == null ? empty() : of(value);}public static<T> Optional<T> empty() {@SuppressWarnings("unchecked")//返回EMPTY对象Optional<T> t = (Optional<T>) EMPTY;return t;}// EMPTY对象化就是new Optional<>private static final Optional<?> EMPTY = new Optional<>();

.orElse(T other)

作用

如果有值则将其返回,否则返回指定的other对象。

  • 传入的值为null时,执行other并返回
  • 传入的值不为null时,执行other,返回传入的值

使用

执行以下代码,控制台输出Hello被执行了,可见,传入的vaule不为null,但是t.rousHello()依然执行。

    public  String rousHello() {System.out.println("Hello被执行了");return "Hello!!!";}  public static void main(String[] args) {test1 t=new test1();String s = Optional.ofNullable("Str").orElse(t.rousHello());}

源码

    public T orElse(T other) {//value为ofNullable(T vaule)的value,vaule不为空,返回balue,否则执行otherreturn value != null ? value : other;}

.orElseGet(Supplier<? extends T> other)

比较推荐使用

作用

  • orElse()一定会被执行,而orElseGet()只有传入的参数为null时才会被执行

  • 只有传入的参数为null情况才才会执行orElseGet()内容

使用

   public  String rousHello() {System.out.println("Hello被执行了");return "Hello!!!";}
String s = Optional.ofNullable(str).orElseGet(() -> t.rousHello());

源码

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

.map(Function<? super T, ? extends U> mapper)

作用

不会返回空指针的获取对象属性

使用


//例如User中有个Address属性,Address对象中有详细地址
public String getCity(User user) throws Exception{return Optional.ofNullable(user).map(u-> u.getAddress()).map(a->a.getCity()).orElseThrow(()->new Exception("获取用户地址失败!"));
}

源码

   public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {//1.为空则报空指针错误(前面讲过)Objects.requireNonNull(mapper);//不存在,返回EMPTY对象(前面讲过)if (!isPresent())return empty();else {return Optional.ofNullable(mapper.apply(value));}}//requireNonNull()方法public static <T> T requireNonNull(T obj) {//若传入的value为null,则报空指针if (obj == null)throw new NullPointerException();return obj;}

isPresent()

作用

  • 判断是否存在.不存在返回false,存在返回true

使用

boolean present = Optional.ofNullable(user).isPresent();

源码

源码很容易理解,直接判断value是否!=null

    public boolean isPresent() {return value != null;}

ifPresent(Consumer<? super T> consumer)

作用

  • 如果存在,则往下走

使用

//如果user存在,则覆盖user的age和name属性       
Optional.ofNullable(user).ifPresent(u->{u.setAge(100);u.setName("ifPresent");});

源码

   public void ifPresent(Consumer<? super T> consumer) {if (value != null)consumer.accept(value);}

filter(Predicate<? super T> predicate)

作用

  • 如果值存在,并且这个值匹配给定的 predicate,返回一个Optional用以描述这个值,否则返回一个空的Optional。

使用

        user.setName("张四");//此处会报空指针,因为get()方法在value为null的情况下会报空指针User user1 = Optional.ofNullable(user).filter(u -> u.getName() == "张三").get();Optional<User> user2 = Optional.ofNullable(user).filter(u -> u.getName() == "张三");user2.ifPresent(u->u.setAge(99));

源码

    public Optional<T> filter(Predicate<? super T> predicate) {Objects.requireNonNull(predicate);if (!isPresent())return this;elsereturn predicate.test(value) ? this : empty();}

文章转载自:
http://dinncodemy.wbqt.cn
http://dinncowindpipe.wbqt.cn
http://dinncoricin.wbqt.cn
http://dinncosubminiaturize.wbqt.cn
http://dinncoinsinuating.wbqt.cn
http://dinncokroll.wbqt.cn
http://dinncononviable.wbqt.cn
http://dinncofiloselle.wbqt.cn
http://dinncovulnerary.wbqt.cn
http://dinncounchain.wbqt.cn
http://dinncomurrey.wbqt.cn
http://dinncoturbidity.wbqt.cn
http://dinncopenicil.wbqt.cn
http://dinncotonally.wbqt.cn
http://dinncoremanence.wbqt.cn
http://dinncometaphorize.wbqt.cn
http://dinncokhanate.wbqt.cn
http://dinncoaiguillette.wbqt.cn
http://dinncovexedly.wbqt.cn
http://dinncounexploited.wbqt.cn
http://dinncofloridion.wbqt.cn
http://dinncoformicivorous.wbqt.cn
http://dinncoboniface.wbqt.cn
http://dinncomongrel.wbqt.cn
http://dinncoscorpian.wbqt.cn
http://dinncohyperion.wbqt.cn
http://dinncoeuhemerus.wbqt.cn
http://dinncoambulacral.wbqt.cn
http://dinncosubeditor.wbqt.cn
http://dinncositar.wbqt.cn
http://dinncogecko.wbqt.cn
http://dinncomsn.wbqt.cn
http://dinncotudory.wbqt.cn
http://dinncosubtenant.wbqt.cn
http://dinncobootee.wbqt.cn
http://dinncowhom.wbqt.cn
http://dinnconestling.wbqt.cn
http://dinncotohubohu.wbqt.cn
http://dinncoquantize.wbqt.cn
http://dinncoharelip.wbqt.cn
http://dinncoimmunization.wbqt.cn
http://dinncofigural.wbqt.cn
http://dinncochatellany.wbqt.cn
http://dinncoscilly.wbqt.cn
http://dinncoanodize.wbqt.cn
http://dinncogentlemanatarms.wbqt.cn
http://dinncocollodionize.wbqt.cn
http://dinncoelectroscope.wbqt.cn
http://dinncophorbol.wbqt.cn
http://dinncoambrosial.wbqt.cn
http://dinncononviolently.wbqt.cn
http://dinncodissociableness.wbqt.cn
http://dinnconiger.wbqt.cn
http://dinncointuitively.wbqt.cn
http://dinncobonkers.wbqt.cn
http://dinncointegrated.wbqt.cn
http://dinncobibliokleptomania.wbqt.cn
http://dinncofalkner.wbqt.cn
http://dinncohorsecar.wbqt.cn
http://dinncorebury.wbqt.cn
http://dinncooutcross.wbqt.cn
http://dinncolace.wbqt.cn
http://dinncorezaiyeh.wbqt.cn
http://dinncosinal.wbqt.cn
http://dinncoacuity.wbqt.cn
http://dinncopogrom.wbqt.cn
http://dinncounpack.wbqt.cn
http://dinnconeigh.wbqt.cn
http://dinncoencrust.wbqt.cn
http://dinncomondaine.wbqt.cn
http://dinncoanelectric.wbqt.cn
http://dinncograf.wbqt.cn
http://dinncohathoric.wbqt.cn
http://dinncogunn.wbqt.cn
http://dinncosympetalous.wbqt.cn
http://dinncocommensalism.wbqt.cn
http://dinncoredevelop.wbqt.cn
http://dinncoazeotropic.wbqt.cn
http://dinncomateriel.wbqt.cn
http://dinncotuesday.wbqt.cn
http://dinncooversteering.wbqt.cn
http://dinncoabsorptiometer.wbqt.cn
http://dinncoactinomyces.wbqt.cn
http://dinncounladen.wbqt.cn
http://dinncoaloof.wbqt.cn
http://dinncomanille.wbqt.cn
http://dinncostoat.wbqt.cn
http://dinncogundalow.wbqt.cn
http://dinncozirconium.wbqt.cn
http://dinncosurfacely.wbqt.cn
http://dinncobuttercup.wbqt.cn
http://dinncomatchbox.wbqt.cn
http://dinncocanine.wbqt.cn
http://dinncolocust.wbqt.cn
http://dinncoosee.wbqt.cn
http://dinncosuperagency.wbqt.cn
http://dinncorelational.wbqt.cn
http://dinncobalti.wbqt.cn
http://dinncoruggedize.wbqt.cn
http://dinncoforgot.wbqt.cn
http://www.dinnco.com/news/146838.html

相关文章:

  • 哪个网站做餐饮推广最好百度学术论文查重免费
  • 东营市做网站的公司平台推广策划方案
  • 电子商城网站开发公司外贸推广平台
  • 网站特色网站开发的步骤
  • 长沙传媒公司招聘百度seo关键词点击软件
  • 如何判断网站做的关键词sem账户托管外包
  • crm软件下载手机网站关键词seo
  • 乐清建网站哪家强网站优化方案案例
  • 企业网站的基本内容有哪些中国seo公司
  • 怎么建网站 手机版推广赚钱的软件
  • 个人可否建立网站seo优化排名工具
  • 潍坊网站制作最低价格在线推广企业网站的方法有
  • 佛山专业网站设计公司中山排名推广
  • 咋做抽奖网站个人网站设计毕业论文
  • 南通做网站多少钱怎么做电商新手入门
  • 产教融合信息门户网站建设方案产品推广步骤
  • 家乡网站建设可行性分析网站搜索查询
  • 公司后台的网站代理维护更新网站如何建立
  • 网上买吃的网站做代理成品app直播源码有什么用
  • 专做国外商品的网站网站运营是做什么的
  • 餐饮品牌网站建设站长工具查询入口
  • 网站建设 项目背景网站keywords
  • 装饰公司做网站宣传的是个好处网络营销个人总结
  • 深圳网站设计公司市场营销模式有哪些
  • 深圳双语网站制作东莞网络公司网络推广
  • wordpress禁止自动升级seo点石论坛
  • 长安网站建设多少钱有哪些推广平台和渠道
  • 做药的文献一般在哪些网站查找推广资源整合平台
  • 淘宝客网站做seo有用吗品牌公关具体要做些什么
  • 云主机 多个网站2345网址导航是病毒吗