@Override
  public Object copy(Object value) {
    try {
      Object replacement = writeReplaceMethod.invoke(value);
      Object newReplacement = getDataSerializer().copy(replacement);
      return READ_RESOLVE_METHOD.invoke(newReplacement);
    } catch (Exception e) {
      throw new RuntimeException("Can't copy lambda " + value, e);
    }
  }
@Test(dataProvider = "furyCopyConfig")
  public void testLambdaCopy(Fury fury) {
    {
      BiFunction<Fury, Object, byte[]> function =
          (Serializable & BiFunction<Fury, Object, byte[]>) Fury::serialize;
      fury.copy(function);
    }
    {
      Function<Integer, Integer> function =
          (Serializable & Function<Integer, Integer>) (x) -> x + x;
      Function<Integer, Integer> newFunc = fury.copy(function);
      assertEquals(newFunc.apply(10), Integer.valueOf(20));
      List<Function<Integer, Integer>> list = fury.copy(Arrays.asList(function, function));
      assertSame(list.get(0), list.get(1));
      assertEquals(list.get(0).apply(20), Integer.valueOf(40));
    }
    assertSame(
        fury.getClassResolver().getSerializerClass(Class.class), Serializers.ClassSerializer.class);
  }