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

如何很好的进行网站的内部推广wordpress tag列表页面

如何很好的进行网站的内部推广,wordpress tag列表页面,网站设计 案例,手机网站开发c 教程大约一个月前#xff0c;我在Java 8的lambda表达式框架下总结了Brian Goetz的观点 。 目前#xff0c;我正在研究有关默认方法的文章#xff0c;令我惊讶的是#xff0c;我又回到了Java处理lambda表达式的方式。 这两个功能的交集可能会产生微妙但令人惊讶的效果#xff0… 大约一个月前我在Java 8的lambda表达式框架下总结了Brian Goetz的观点 。 目前我正在研究有关默认方法的文章令我惊讶的是我又回到了Java处理lambda表达式的方式。 这两个功能的交集可能会产生微妙但令人惊讶的效果我想讨论一下。 总览 为了使这一点更有趣我将以一个示例开头该示例将以我的个人WTF达到顶峰 时刻。 完整的示例可以在专用的GitHub项目中找到 。 然后我们将看到有关此意外行为的解释并最终得出一些预防错误的结论。 例 这里有个例子……它不是那么简单或抽象因为我希望它显示这种情况的相关性。 但是从某种意义上说它仍然只是一个示例它仅暗示可能实际上会做一些有用的事情的代码。 功能界面 假设对于在构建期间结果已经存在的情况我们需要对Future接口进行特殊化。 我们决定通过创建一个接口ImmediateFuture来实现此目的该接口get()使用默认方法实现除get()之外的所有功能。 这导致功能界面 。 您可以在此处查看源代码。 一个工厂 接下来我们实现FutureFactory 。 它可能创建各种期货但肯定会创建我们的新子类型。 它是这样的 未来工厂 /*** Creates a new future with the default result.*/ public static FutureInteger createWithDefaultResult() {ImmediateFutureInteger immediateFuture () - 0;return immediateFuture; }/*** Creates a new future with the specified result.*/ public static FutureInteger createWithResult(Integer result) {ImmediateFutureInteger immediateFuture () - result;return immediateFuture; }创造未来 最后我们使用工厂创建一些期货并将其收集在一组中 创建实例 public static void main(String[] args) {SetFuture? futures new HashSet();futures.add(FutureFactory.createWithDefaultResult());futures.add(FutureFactory.createWithDefaultResult());futures.add(FutureFactory.createWithResult(42));futures.add(FutureFactory.createWithResult(63));System.out.println(futures.size()); }WTF 运行程序。 控制台会说... 4 不。 3。 WTF Lambda表达式的评估 那么这是怎么回事 那么与有关lambda表达式的评估一些背景知识这其实并不奇怪。 如果您不太熟悉Java的实现方式那么现在是赶上Java的好时机。 这样做的一种方法是观看Brian Goetz的演讲“ Java中的Lambdas深入了解”或阅读我的摘要 。 Lambda表达式的实例 理解这种行为的关键在于事实是JRE不保证如何将lambda表达式转换为相应接口的实例。 让我们看一下Java语言规范对此事的看法 15.27.4。 Lambda表达式的运行时评估 […] 分配并初始化具有以下属性的类的新实例或者引用具有以下属性的类的现有实例。 […类的属性–这里不足为奇…] 这些规则旨在通过以下方式为Java编程语言的实现提供灵活性 不必在每次评估中分配一个新对象。 由不同的lambda表达式产生的对象不必属于不同的类例如如果主体相同。 评估产生的每个对象不必属于同一类例如可以内联捕获的局部变量。 如果“现有实例”可用则无需在先前的lambda评估中创建它例如可能在封闭类的初始化期间分配了它。 […] JLSJava SE 8版§15.27.4 在其他优化中这显然使JRE可以返回相同的实例以重复评估lambda表达式。 非捕获Lambda表达式的实例 请注意在上面的示例中表达式不捕获任何变量。 因此它永远不会因评估而改变。 而且由于lambda并非设计为具有状态因此不同的评估在其生命周期中也无法“分散”。 因此一般而言没有充分的理由来创建多个不捕获的lambda实例因为它们在整个生命周期中都完全相同。 这样可以使优化始终返回相同的实例。 将其与捕获某些变量的lambda表达式进行对比。对此表达式的直接评估是创建一个将捕获的变量作为字段的类。然后每个单个评估都必须创建一个新实例将实例存储在其字段中这些情况显然并不完全相同。 这就是上面代码中发生的事情。 () - 0是一个不捕获的lambda表达式因此每个评估都返回相同的实例。 因此对createWithDefaultResult()每次调用都是如此。 但是请记住这仅适用于当前安装在我的计算机上的JRE版本用于Win 64的Oracle 1.8.0_25-b18。 您的可以有所不同下一个gal也可以如此等等。 得到教训 因此我们了解了为什么会这样。 尽管这很有意义但我仍然会说这种行为并不明显因此并不是每个开发人员都期望的。 这是产生错误的温床因此让我们尝试分析情况并从中学习一些东西。 使用默认方法进行子类型化 可以说意外行为的根本原因是如何完善Future的决定。 为此我们扩展了另一个接口并使用默认方法实现了部分功能。 仅剩一个未实现的方法 ImmediateFuture成为了一个启用lambda表达式的功能接口。 另外 ImmediateFuture可以是抽象类。 这样可以防止工厂意外返回相同的实例因为它不能使用lambda表达式。 关于抽象类和默认方法的讨论不容易解决因此我在这里不尝试这样做。 但是我很快将发布有关默认方法的文章并且我打算再讲一遍。 可以说在做出决定时应考虑此处提出的案例。 工厂中的Lambda 由于lambda的引用相等性不可预测因此工厂方法应仔细考虑使用它们来创建实例。 除非方法的合同明确允许不同的调用返回相同的实例否则应完全避免使用它们。 我建议在此禁令中包括捕获lambda。 对我而言一点也不清楚在什么情况下同一实例可以在将来的JRE版本中重用。 一种可能的情况是JIT发现紧密的循环创建了总是或至少经常返回同一实例的供应商。 通过用于不捕获lambda的逻辑重用同一供应商实例将是有效的优化。 匿名类与Lambda表达式 注意匿名类和lambda表达式的不同语义。 前者保证创建新实例而后者则不能。 为了继续该示例以下createWithDefaultResult()将导致futures –大小为4的集合 匿名类的替代实现 public static FutureInteger createWithDefaultResult() {ImmediateFutureInteger immediateFuture new ImmediateFutureInteger() {Overridepublic Integer get() throws InterruptedException, ExecutionException {return 0;}};return immediateFuture; } 这尤其令人不安因为许多IDE允许从匿名接口实现到lambda表达式的自动转换反之亦然。 由于两者之间存在细微的差异这种看似纯粹的句法转换会带来细微的行为变化。 我最初并不了解。 如果您最终遇到了这种情况并选择使用匿名类请确保明显记录您的决定 不幸的是似乎没有办法阻止Eclipse对其进行任何转换例如如果将转换作为保存操作启用这也会删除匿名类中的所有注释。 最终的选择似乎是一个静态嵌套类。 我知道没有IDE敢将其转换为lambda表达式因此这是最安全的方法。 尽管如此仍需要对其进行记录以防止下一个Java-8狂热分子确实像您一样出现并加紧您的仔细考虑。 功能接口标识 当您依赖功能接口的标识时要小心。 始终考虑是否有可能无论您在何处获得这些实例都可能反复将您交给同一个实例。 但这当然是模糊的几乎没有什么具体的结果。 首先所有其他接口都可以简化为功能接口。 这实际上就是我选择Future的原因-我想举个例子不要立即尖叫疯狂的Lambda狗屎 其次这会使您很快变得偏执。 因此请不要过分考虑-记住这一点。 保证行为 最后但并非最不重要的一点这始终是正确的但值得在此重复 不要依靠无证的行为 JLS不保证每个lambda评估都返回一个新实例如上面的代码所示。 但这并不能保证观察到的行为即未捕获的lambda始终由同一实例表示。 因此不要编写依赖于任何一个的代码。 不过我必须承认这是一个艰难的过程。 认真地说谁在使用某些功能之前先看过它们的JLS 我当然不会。 反射 我们已经看到Java不能保证所评估的lambda表达式的身份。 尽管这是一个有效的优化但它可能会产生令人惊讶的效果。 为了防止这种情况引入细微的错误我们派生了以下准则 使用默认方法部分实现接口时要小心。 不要在工厂方法中使用lambda表达式。 当身份重要时请使用匿名类或更好的内部类。 依赖功能接口的标识时要小心。 最后 不要依赖未记录的行为 翻译自: https://www.javacodegeeks.com/2015/01/instances-of-non-capturing-lambdas.html
http://www.yutouwan.com/news/45200/

相关文章:

  • 域名 不做网站泉州免费建站模板
  • 网站建设管理规定门户网站建设调查问卷
  • 比较容易做的网站暖暖 视频 在线 观看 高清
  • 适合在线做笔试的网站网站备案密码收不到
  • 温州哪里可以做企业网站网站如果直接点击拨打电话
  • 竞价网站单页怎么样做电影网站
  • 企业网站建设方案 wordphp美食网站开发背景
  • phpstudy 网站空白北滘大良网站制作
  • 做第一个php网站深圳电器公司是国企吗
  • ppt模板免费下载网站哪个好徐州公司网站制作
  • 深圳网站seo 乐云践新贵州新闻
  • 用js做的网站代码吗做网站流程 优帮云
  • 红包打赏的网站怎么做网站建设SEO优化哪家好
  • 锦州网站建设更好网站怎么接入百度地图
  • 网站建设捌金手指下拉十四网站建设的规划和流程
  • 039 织梦云idc网站源码百度怎么做自己的网站
  • 珠海企业集团网站建设代理商加盟项目网站
  • 自助建站申请书大网站
  • 上传网站图片处理新网站怎么做才能让搜狗收录
  • 做网站域名 空间客户案例 网站设计
  • 网站开发代码交接文档书做网站个人备案
  • 做冒菜店网站网站首页收录没有了
  • 便宜网站开发培训漯河做网站的店
  • 宁波优化网站排名公司推荐上海人才建交网
  • 怎么做能上谷歌网站城市建设的网站 政策法规
  • 宁波高端网站开发做公司网站别人能看到吗6
  • 济南协会网站设计团队上门做指甲哪个网站
  • 开通网站申请商城网站建设新闻
  • 青岛做网站的公司哪个好做婚恋网站代理商挣钱吗
  • 各大设计网站辽宁城建设计院有限公司网站