JDK新特性2.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JDK新特性2

* * * * * * * * * * * * * * * * * * * * * * * * * * public void invokerTransform() throws Throwable { MethodType typeInvoker = MethodType.methodType(String.class, String.class, int.class, int.class); MethodHandle invoker = MethodHandles.exactInvoker(typeInvoker); MethodHandles.Lookup lookup = MethodHandles.lookup(); MethodHandle mhUpperCase = lookup.findVirtual(String.class, toUpperCase, MethodType.methodType(String.class)); invoker = MethodHandles.filterReturnValue(invoker, mhUpperCase); MethodType typefind = MethodType.methodType(String.class, int.class, int.class); MethodHandle mh1 = lookup.findVirtual(String.class, substring, typefind); String result = (String) invoker.invoke(mh1, Hello, 1, 4); System.out.println(result); } 方法句柄也具备动态实现一个接口的能力。这是通过java.lang.invoke.MethodHandleProxies类中的静态方法asInterfaceInstance来实现的。 不过通过方法句柄实现接口所受的限制比较多。首先该接口必须是公开的,该接口只能包含一个名词唯一的方法。这样的限制是因为只有一个方法句柄用来处理方法调用。 调用asInterfaceInstance方法时需要两个参数,第一个参数是要实现的接口类,第二个参数是处理方法调用逻辑的方法句柄对象。方法的返回值是一个实现了该接口的对象。 当调用接口方法时,这个调用会被代理给方法句柄来完成。方法句柄的返回值会作为接口调用的返回值。接口的方法类型和方法句柄的类型必须是兼容的,否则会抛出异常。 public void doSomething() { System.out.println(Ljinfeng); } public void userMethodHandleProxy() throws Throwable { MethodHandles.Lookup lookup = MethodHandles.lookup(); MethodHandle mh = lookup.findVirtual( UseMethodHandleImplementInterface.class, doSomething, MethodType.methodType(void.class)); mh = mh.bindTo(this); Runnable runnable = MethodHandleProxies.asInterfaceInstance( Runnable.class, mh); new Thread(runnable).start(); } 在通过查找已有类中的方法得到方法句柄的时候,要受限于java语言中已有的方法控制权限。 方法句柄于反射API在访问控制权限上的一个重要区别在于,在每次调用反射API的Method类的invoke方法的时候都需要检查方法控制权限,而方法句柄只在查找的时候进行检查。只要在查找过程中不出现问题,方法句柄在使用过程中就不会出现与访问控制权限相关的问题。这种实现也使方法句柄在调用时的性能要优于Method类 package com.methodhandle; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; public class AccessControlAuthority { private void privateMethod() { System.out.println(PRIVATE); } public MethodHandle accessControl() throws Throwable { M

文档评论(0)

qianqiana + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5132241303000003

1亿VIP精品文档

相关文档