code: package delegate;
  
  // Example usage
  // Memory management ignored for simplification
  public interface DelegateTest {
    public static String thingable() {
      return "method reference implementation";
    }
  
    public static void main(String... arguments) {
      // Without a delegate:
      Delegator d1 = Delegator.new_();
      assert d1.operation().equals("default implementation");
  
      // With a delegate:
      Delegator d2 = d1.delegate(new Delegate());
      assert d2.operation().equals("delegate implementation");
  
      // Same as the above, but with an anonymous class:
      Delegator d3 = d2.delegate(new Thingable() {
        @Override
        public String thing() {
          return "anonymous delegate implementation";
        }
      });
      assert d3.operation().equals("anonymous delegate implementation");
  
      // Same as the above, but with a method reference:
      Delegator d4 = d3.delegate(DelegateTest::thingable);
      assert d4.operation().equals("method reference implementation");
  
      // Same as the above, but with a lambda expression:
      Delegator d5 = d4.delegate(() -> "lambda expression implementation");
      assert d5.operation().equals("lambda expression implementation");
    }
  }
  