如果您找不到优雅的方法,这就是丑陋的方法(Ideone)。涉及反射时通常会发出警告:在将来的发行版中可能会中断
public static void main(String[] args) throws Exception { Function<String, String> sayHello = name -> "Hello, " + name; Method m = getMethodFromLambda(sayHello); registerFunction("World", m);}static void registerFunction(String name, Method method) throws Exception { String result = (String) method.invoke(null, name); System.out.println("result = " + result);}private static Method getMethodFromLambda(Function<String, String> lambda) throws Exception { Constructor<?> c = Method.class.getDeclaredConstructors()[0]; c.setAccessible(true); Method m = (Method) c.newInstance(null, null, null, null, null, 0, 0, null, null, null, null); m.setAccessible(true); //sets override field to true //m.methodAccessor = new LambdaAccessor(...) Field ma = Method.class.getDeclaredField("methodAccessor"); ma.setAccessible(true); ma.set(m, new LambdaAccessor(array -> lambda.apply((String) array[0]))); return m;}static class LambdaAccessor implements MethodAccessor { private final Function<Object[], Object> lambda; public LambdaAccessor(Function<Object[], Object> lambda) { this.lambda = lambda; } @Override public Object invoke(Object o, Object[] os) { return lambda.apply(os); }}


