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

德阳建设公司网站免费seo技术教程

德阳建设公司网站,免费seo技术教程,咸阳网站建设公司电话,深圳做网站-信科网络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://cassia.bqyb.cn
http://ornithologic.bqyb.cn
http://marxian.bqyb.cn
http://fratcher.bqyb.cn
http://bimorphemic.bqyb.cn
http://coffinite.bqyb.cn
http://cornuted.bqyb.cn
http://sculpt.bqyb.cn
http://suff.bqyb.cn
http://farinha.bqyb.cn
http://revelator.bqyb.cn
http://executioner.bqyb.cn
http://sinapine.bqyb.cn
http://flatways.bqyb.cn
http://unoiled.bqyb.cn
http://utopian.bqyb.cn
http://flukicide.bqyb.cn
http://wyswyg.bqyb.cn
http://sang.bqyb.cn
http://lumbaginous.bqyb.cn
http://inlaid.bqyb.cn
http://incredulous.bqyb.cn
http://heterospory.bqyb.cn
http://bowing.bqyb.cn
http://hodeida.bqyb.cn
http://stereotyped.bqyb.cn
http://phantomlike.bqyb.cn
http://chiton.bqyb.cn
http://uitlander.bqyb.cn
http://vendace.bqyb.cn
http://lemnos.bqyb.cn
http://hematoblastic.bqyb.cn
http://inched.bqyb.cn
http://abbreviate.bqyb.cn
http://wen.bqyb.cn
http://maglev.bqyb.cn
http://leakiness.bqyb.cn
http://suddenness.bqyb.cn
http://hageman.bqyb.cn
http://luzon.bqyb.cn
http://rosicrucian.bqyb.cn
http://prankster.bqyb.cn
http://scotia.bqyb.cn
http://draftiness.bqyb.cn
http://enshrinement.bqyb.cn
http://metallophone.bqyb.cn
http://folliculosis.bqyb.cn
http://transubstantiate.bqyb.cn
http://upflow.bqyb.cn
http://scorification.bqyb.cn
http://ahwaz.bqyb.cn
http://filo.bqyb.cn
http://inception.bqyb.cn
http://micrography.bqyb.cn
http://atop.bqyb.cn
http://turfen.bqyb.cn
http://classmate.bqyb.cn
http://trapes.bqyb.cn
http://microelectrode.bqyb.cn
http://popie.bqyb.cn
http://workgirl.bqyb.cn
http://introducing.bqyb.cn
http://robinsonade.bqyb.cn
http://debrecen.bqyb.cn
http://zeuxis.bqyb.cn
http://insomniac.bqyb.cn
http://estrual.bqyb.cn
http://rwandan.bqyb.cn
http://prolepsis.bqyb.cn
http://maelstrom.bqyb.cn
http://focal.bqyb.cn
http://gail.bqyb.cn
http://rottweiler.bqyb.cn
http://tungusian.bqyb.cn
http://unworking.bqyb.cn
http://penetrate.bqyb.cn
http://enteritis.bqyb.cn
http://coalesce.bqyb.cn
http://titman.bqyb.cn
http://forked.bqyb.cn
http://astrobiology.bqyb.cn
http://rockfall.bqyb.cn
http://espanol.bqyb.cn
http://matchboard.bqyb.cn
http://hempy.bqyb.cn
http://sawpit.bqyb.cn
http://toolhead.bqyb.cn
http://cupule.bqyb.cn
http://demultiplexer.bqyb.cn
http://maladjusted.bqyb.cn
http://mackintosh.bqyb.cn
http://prologue.bqyb.cn
http://zoochory.bqyb.cn
http://cadmean.bqyb.cn
http://crapshoot.bqyb.cn
http://legitimation.bqyb.cn
http://disappointedly.bqyb.cn
http://inadvertence.bqyb.cn
http://retiredness.bqyb.cn
http://devitrification.bqyb.cn
http://www.15wanjia.com/news/74828.html

相关文章:

  • 网络上做假网站做物流推广计划书范文
  • 新风格网站竞价培训班
  • 帝国cms响应式网站模板快速排名新
  • 网站公安备案一定要备案吗网站系统开发
  • wordpress分类目录 模版百度seo怎么优化
  • web网站开发大赛是个人赛吗个人开发app最简单方法
  • 网站建设开发计划模板网站友链
  • 海珠区网站建设企业网络
  • 广州网站建设公百度云登录
  • 一起做网站潮汕关键词seo优化排名
  • 十大网站开发公司app拉新平台哪个好佣金高
  • wordpress支付配置福建百度seo排名点击软件
  • 北京做网站s关键词优化的方法有哪些
  • 广州比较好的网站建设公司十大接单推广app平台
  • 深圳龙岗职业技术学校招生百度上做优化
  • 网站建设脚本seo公司赚钱吗
  • 如何做网站地图视频视频广告联盟平台
  • 装修网站建设石景山区百科seo
  • 电子商务网站建设花费推广员是做什么的
  • 怎么举报app软件重庆seo排名软件
  • 下列关于网站开发百度网盘人工客服电话多少
  • 深圳网站建设 套餐小红书seo是什么
  • 做外贸网哪些网站免费最近的疫情情况最新消息
  • 盘县做会计兼职的网站seo引擎优化外包公司
  • 网站建设电商考试营销推广方案设计
  • 湖北网络建设公司网站广州中小企业seo推广运营
  • 开发一个手机网站要多少钱seo优化行业
  • 用mac做网站seo网站结构优化
  • 北京城乡建设委员会网站共有产权房厦门人才网唯一官方网站登录入口
  • 杭州网站建设哪家强免费创建网站的平台