Java8 dynamic proxy and default methods

后端 未结 4 1252
北荒
北荒 2021-01-01 20:43

Having a dynamic proxy for an interface with default methods, how do I invoke a default method? By using something like defaultmethod.invoke(this, ...) you just

4条回答
  •  无人及你
    2021-01-01 21:26

    You can use the MethodHandles type in your InvocationHandler. This code is copied from Zero Turnaround.

    Constructor constructor;
    Class declaringClass;
    Object result;
    
    if (method.isDefault()) {
       declaringClass = method.getDeclaringClass();
       constructor = MethodHandles.Lookup.class.getDeclaredConstructor(Class.class, int.class);
    
       constructor.setAccessible(true);
    
       result = constructor.
          newInstance(declaringClass, MethodHandles.Lookup.PRIVATE).
          unreflectSpecial(method, declaringClass).
          bindTo(proxy).
          invokeWithArguments(args);
    
       return(result);
    }
    

提交回复
热议问题