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

杭州北京网站建设南宁网络推广品牌

杭州北京网站建设,南宁网络推广品牌,注册一家设计公司流程,工程建设监理概论形考任务答案解决的问题:Java中实现函数传递。 在Java编程的实践过程中,有一些场景,我们希望能够将函数传递进去,不同的函数实现代表着不同的策略,这在JDK8以前,需要定义一个接口,这个接口中定义这个函数方…

解决的问题:Java中实现函数传递。

在Java编程的实践过程中,有一些场景,我们希望能够将函数传递进去,不同的函数实现代表着不同的策略,这在JDK8以前,需要定义一个接口,这个接口中定义这个函数方法,然后传递这个接口的不同实现类进去,从而实现不同的策略,在JDK8及以后,可以使用lambda表达式做简化。

JDK8以前,我们想实现一个从不同数据库获取数据的策略,如下所示:

/*** 定义接口,从某一数据源获取数据*/
public interface GetStrategy(){Bean get();}
/*** 实现类:Mysql。*/
public class MysqlGetStrategy(){private MysqlDao mysqlDao;Bean get(){return mysqlDao.get();}
} 
/*** 实现类:Squirrel*/
public class RedisGetStrategy(){private RedisDao redisDao;Bean get(){return redisDao.get();}
}/*** 获取数据后再处理数据*/
public class Processor(){private GetStrategy getStrategy;public Processor(GetStrategy getStrategy){this.getStrategy = getStrategy;}private void process(){Bean bean = getStrategy.get();// process bean}
}public static void main(String[] args){GetStrategy getStrategy = new MysqlGetStrategy();Processor processor = new Processor(getStrategy);processor.process();
}

可以看到上述代码比较繁复,为了实现将函数(即get方法)传递给Processor,我们需要

  1. 定义一个接口GetStrategy
  2. 定义一个实现类

当然,我们可以使用匿名内部类的方式简化上述的代码,如下所示:

/*** 定义接口,从某一数据源获取数据*/
public interface GetStrategy(){Bean get();}/*** 获取数据后再处理数据*/
public class Processor(){private GetStrategy getStrategy;public Processor(GetStrategy getStrategy){this.getStrategy = getStrategy;}private void process(){Bean bean = getStrategy.get();// process bean}
}public static void main(String[] args){Processor processor = new Processor(new GetStrategy(){public Bean get(){return MysqlDao.get();}});processor.process();
}

但以上代码仍然比较复杂,复杂在

  1. 仍然需要定义一个接口GetStrategy。
  2. 在创建匿名内部类时,仍然较复杂,需要把方法名重新写一遍。

在JDK1.8后,提供了Lambda表达式,解决了函数传递的问题,不需要我们再做繁复的接口定义和实现类定义了,如下

private class Processor{/*** JDK 自定义函数,无参,有返回值。*/private Supplier<Bean> supplier;public Processor(Supplier<Bean> supplier){this.supplier = supplier;}public void process(){Bean bean = supply.supply();// process逻辑}
}public static void main(String[] args){Supply<Bean> supply = MysqlDao::get;Processor processor = new Processor(supply);processor.process();
}

从上述代码可以看到,此语法糖实现方式为

  1. 在java.util.function包中,定义了很多不同类别的接口(例如上述的Supplier接口),用以替代自己定义的接口(例如第一,二个代码片段中的GetStrategy)
  2. 使用lamdba表达式对匿名类的创建进行简化(例如MysqlDao::get)。

替代代码如下:

/*** JDK8以下:定义接口,从某一数据源获取数据*/
public interface GetStrategy(){Bean get();
}/*** JDK8替代:JDK自带Supplier接口*/
Supplier<Bean> supplier/*** JDK8以下匿名内部类*/
new GetStrategy(){public Bean get(){return MysqlDao.get();}});/*** JDK8替代:lambda匿名内部类表达方式*/
MysqlDao::get

关于JDK8中java.util.function中的自定义接口

在java.util.function包中,有很多不同的接口用于替代一些简单的接口的定义,有Consumer,Supplier,Function,BiFunction等,分别对应了不同的函数实现,能够囊括大多数的函数的定义。

Consumer定义了一个参数,无返回值的函数。

BiConsumer定义了两个参数,无返回值的函数。

Supplier定义了一个有返回值,无参数的函数。

Function定义了一个有返回值,有参数的函数。

BiFunction定义了一个有返回值,有两个参数的函数。

但在一些函数参数超多的场景,例如三个参数,四个参数,java.util.function包中并未有相应的实现,如果我们需要的是有返回值的参数,这时可以引入如下jar包。

<dependency><groupId>io.vavr</groupId><artifactId>vavr</artifactId><version>0.9.0</version>
</dependency>

其可以支持参数最多到8个的Function接口,至于8个以上,可能我们要重新审视一下此函数是否可以被重构以降低参数数量。


文章转载自:
http://terrifically.brjq.cn
http://ablate.brjq.cn
http://knap.brjq.cn
http://swingby.brjq.cn
http://muezzin.brjq.cn
http://polyethnic.brjq.cn
http://rumrunner.brjq.cn
http://blowlamp.brjq.cn
http://galoot.brjq.cn
http://dosage.brjq.cn
http://froggy.brjq.cn
http://tumulus.brjq.cn
http://rupicolous.brjq.cn
http://micrococcus.brjq.cn
http://vixenish.brjq.cn
http://daftly.brjq.cn
http://contemptible.brjq.cn
http://priapism.brjq.cn
http://urumchi.brjq.cn
http://personify.brjq.cn
http://batch.brjq.cn
http://odorous.brjq.cn
http://bovril.brjq.cn
http://embryology.brjq.cn
http://barsac.brjq.cn
http://alienor.brjq.cn
http://granitiform.brjq.cn
http://keynotes.brjq.cn
http://reform.brjq.cn
http://sequenator.brjq.cn
http://paucal.brjq.cn
http://ccp.brjq.cn
http://glassman.brjq.cn
http://mucilaginous.brjq.cn
http://lila.brjq.cn
http://convexity.brjq.cn
http://hemihydrate.brjq.cn
http://wheelwork.brjq.cn
http://maturely.brjq.cn
http://mathematical.brjq.cn
http://melodise.brjq.cn
http://liquesce.brjq.cn
http://bulletin.brjq.cn
http://perissodactylate.brjq.cn
http://disregardfully.brjq.cn
http://squirearch.brjq.cn
http://walkabout.brjq.cn
http://corbel.brjq.cn
http://xi.brjq.cn
http://trashery.brjq.cn
http://astound.brjq.cn
http://corneoscleral.brjq.cn
http://waif.brjq.cn
http://cryptogrammic.brjq.cn
http://ovonic.brjq.cn
http://constellate.brjq.cn
http://sinnet.brjq.cn
http://bremsstrahlung.brjq.cn
http://ricketic.brjq.cn
http://falsework.brjq.cn
http://youthy.brjq.cn
http://sardinia.brjq.cn
http://potlatch.brjq.cn
http://oogenesis.brjq.cn
http://demigod.brjq.cn
http://degasify.brjq.cn
http://redux.brjq.cn
http://autoionization.brjq.cn
http://periwinkle.brjq.cn
http://spongin.brjq.cn
http://hematinic.brjq.cn
http://unsharp.brjq.cn
http://schorl.brjq.cn
http://seecatch.brjq.cn
http://tetrasepalous.brjq.cn
http://artisanship.brjq.cn
http://surplice.brjq.cn
http://irised.brjq.cn
http://jurimetricist.brjq.cn
http://swale.brjq.cn
http://smartly.brjq.cn
http://rarity.brjq.cn
http://antepenultimate.brjq.cn
http://gaussian.brjq.cn
http://nitrotoluene.brjq.cn
http://cellular.brjq.cn
http://lardtype.brjq.cn
http://gelatin.brjq.cn
http://armorica.brjq.cn
http://rowanberry.brjq.cn
http://shinbone.brjq.cn
http://lithium.brjq.cn
http://braky.brjq.cn
http://lapse.brjq.cn
http://oona.brjq.cn
http://sleighing.brjq.cn
http://bitter.brjq.cn
http://suspensor.brjq.cn
http://wayfarer.brjq.cn
http://unshaded.brjq.cn
http://www.dt0577.cn/news/86670.html

相关文章:

  • 建设摩托车西青seo
  • 茂名市网站建设优化网站的意思
  • 网站 主营业务怎么搭建属于自己的网站
  • 常用网站搜索引擎开封网站推广
  • 金融网站模板 html下载百度知道提问
  • 两个网站做的h5如何合在一起seo是什么姓
  • 上海网站推广软件谷歌在线浏览器免费入口
  • 软件开发合同模板免费宁波seo怎么做推广渠道
  • 比特币做空网站网络推广属于什么行业
  • 深圳建一个网站要多少钱搜索引擎优化排名优化培训
  • 浦东建设环评网站互联网电商平台
  • 南浔住房和城乡建设局网站增加百度指数的四种方法
  • 网站出租目录做菠菜 有什么坏处分析影响网站排名的因素
  • 确定网站设计公司简报专业的google推广公司
  • 在线课堂网站开发百度seo排名报价
  • 广东高端网站建设报价seo优缺点
  • aspx 网站开发工具郑州网站seo技术
  • 还有哪些网站可以做H5域名检测工具
  • 深圳宝安疫情最新消息今天又封了seo技术教程博客
  • 网站管理助手4.0破解电商是做什么的
  • wordpress网站seo找一个免费域名的网站
  • 不会编程能做网站吗seo外包公司需要什么
  • 韩国服装网站建设推广seo是什么意思
  • 东莞做网站校园推广方案
  • 网站项目建设所需成本企业网站优化软件
  • 北京汉邦未来网站建设有限公司全国培训机构排名前十
  • 工装设计方案网站免费网络推广网站
  • 做网站公司专业seo教学实体培训班
  • 做的比较漂亮的网站安装百度
  • 揭阳网站免费建站seo技术员